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();
  }
}
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),
        ),
      ),
    );
  }
}
- Computational complexity of 
ofmethod, which is used for accessing the bloc isO(1). - 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.