Provides BLoC(Business Logic Component) to descendant widget (O(1)), and the bloc is disposed automatically by the state which the bloc_provider holds internally.
bloc_provider was one of the good choice for BLoC pattern until early 2019, but I now recommend to use these instead.
- provider
- disposable_provider
- Thin wrapper of Provider and it calls dispose automatically.
- bloc
- riverpod
bloc_provider will now be minimally maintained.
class CounterBloc implements Bloc { final _countController = BehaviorSubject<int>.seeded(0); final _incrementController = PublishSubject<void>(); CounterBloc() { _incrementController .scan<int>((sum, _v, _i) => sum + 1, 0) .pipe(_countController); } ValueStream<int> get count => _countController; Sink<void> get increment => _incrementController.sink; @override void dispose() async { await _incrementController.close(); await _countController.close(); } }void main() => runApp( // Create and provide the bloc. BlocProvider<CounterBloc>( creator: (_context, _bag) => CounterBloc(), child: App(), ), ); class App extends StatelessWidget { @override Widget build(BuildContext context) { // Access the bloc with O(1) computation complexity. final bloc = BlocProvider.of<CounterBloc>(context); return MaterialApp( home: Scaffold( body: Center( child: StreamBuilder<int>( stream: bloc.count, initialData: bloc.count.value, builder: (context, snap) => Text( 'count: ${snap.data}', style: Theme.of(context).textTheme.title, ), ), ), floatingActionButton: FloatingActionButton( child: const Icon(Icons.add), onPressed: () => bloc.increment.add(null), ), ), ); } }- Computational complexity of
ofmethod, which is used for accessing the bloc isO(1). - Provided bloc will be disposed when the inner state is disposed 👍
- https://github.com/mono0926/bloc_provider/tree/master/example
- mono0926/wdb106-flutter
- TaskShare/taskshare-flutter
- Flutter の BLoC(Business Logic Component)のライフサイクルを正確に管理して提供する Provider パッケージの解説
- Japanese only, currently🙇🇯🇵
Please file feature requests and bugs at the issue tracker.