bloc_provider

Creator: coderz1093

Last updated:

Add to Cart

Description:

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.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.