bloc_provider
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.
Recommended other packages
bloc_provider was one of the good choice for BLoC pattern until early 2019, but I now recommend to use these instead.
bloc_provider will now be minimally maintained.
Usage
1. Define some BLoC like this:
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 ();
}
}
2. Provide the bloc by using BlocProvider and access the bloc at subtree:
void main () => runApp (
BlocProvider <CounterBloc >(
creator: (_context, _bag) => CounterBloc (),
child: App (),
),
);
class App extends StatelessWidget {
@override
Widget build (BuildContext context) {
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 of method, which is used for accessing the bloc is O(1).
Provided bloc will be disposed when the inner state is disposed 👍
Examples
Technical explanation
Features and bugs
Please file feature requests and bugs at the issue tracker .