什麼是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;
    }
  }
}