什麼是BLoC Design Pattern
Business Logic Component Pattern 簡稱 BLoC。這是一種設計模式,特色在於把商業邏輯(Business Login)與畫面(Presentation)拆分開,類似 MVVM 中 ViewModel(BloC)與 View(Presentation)之間的關係,並且透過事件(Event)來改變狀態(State),再由狀態(State)來改變畫面(Presentation), 又或者與其他的 BLoC 進行溝通。好處有 1)讓測試變的更簡單 2)更容讓程式碼 Reusable。所以元件主要會有三個部份: BloC 主件、事件(Event)及狀態(State)。
BLoC 主件,主要是將 Event 與 State 做 Mapping,透過 Event 去改變狀態。所以,如果 Event 很多的話,就會看到冗長的 if…else 或是 switch…case,如下:
import 'package:bloc/bloc.dart';
enum CounterEvent { increment, decrement }
class CounterBloc extends Bloc<CounterEvent, int> {
@override
int get initialState => 0;
@override
Stream<int> mapEventToState(CounterEvent event) async* {
switch (event) {
case CounterEvent.decrement:
yield currentState - 1;
break;
case CounterEvent.increment:
yield currentState + 1;
break;
}
}
}