0 purchases
bloc provider
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.
provider
disposable_provider
Thin wrapper of Provider and it calls dispose automatically.
bloc
riverpod
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();
}
}
copied to clipboard
2. Provide the bloc by using BlocProvider and access the bloc at subtree:
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),
),
),
);
}
}
copied to clipboard
Computational complexity of of method, which is used for accessing the bloc is O(1).
of method can be also called at State's initState.
Provided bloc will be disposed when the inner state is disposed 👍
Examples #
https://github.com/mono0926/bloc_provider/tree/master/example
mono0926/wdb106-flutter
TaskShare/taskshare-flutter
Technical explanation #
Flutter の BLoC(Business Logic Component)のライフサイクルを正確に管理して提供する Provider パッケージの解説
Japanese only, currently🙇🇯🇵
Features and bugs #
Please file feature requests and bugs at the issue tracker.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.