Flutter BLoCを軽く調べる

自分は最初からriverpodで始めたので必要ないかと思いましたが、たまに見かけるので。

BLoC

stands for Business Logic Components.

cubitが統合されてる

https://github.com/felangel/cubit

どんなコード?

https://bloclibrary.dev/#/coreconcepts?id=creating-a-cubit

class CounterCubit extends Cubit<int> {
  CounterCubit(int initialState) : super(initialState);
}

StateNotifierに似てる
https://pub.dev/packages/state_notifier

stateを変更する場合はemitを使う

class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);

  void increment() => emit(state + 1);
}

stateを変更するStateNotifierとはちょっと違う

Just like with Cubit, a Bloc is a special type of Stream,
https://bloclibrary.dev/#/coreconcepts?id=stream-usage-1

enum CounterEvent { increment, decrement }

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0);

  @override
  Stream<int> mapEventToState(CounterEvent event) async* {
    switch (event) {
      case CounterEvent.decrement:
        yield state - 1;
        break;
      case CounterEvent.increment:
        yield state + 1;
        break;
    }
  }
}

caseでメソッドを判定したり、yieldを使ったり結構癖がある気がするが、 全てがstreamで表現されるのは統一性があるのかもしれない。

それと中でproviderを使ってる
https://github.com/felangel/bloc/blob/master/packages/flutter_bloc/pubspec.yaml#L16
providerがメンテされなくなったらどうなるのだろうか?