パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v1.0.1

bloc_provider

子ウィジェットにブロックを提供します(O(1))、そしてブロックは、ブロックプロバイダが内部で保持する状態によって適切に破棄されます。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
5000
いいね数
25
Pub ポイント
150

パッケージをインストール

flutter pub add bloc_provider

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

BlocProviderは、Flutterアプリ内の子ウィジェットにO(1)の検索時間でBlocインスタンスを効率的に提供する軽量パッケージです。提供されたBlocのライフサイクルを管理し、所有するウィジェットがツリーから削除されたときに自動的に破棄します。Blocパターンとのシームレスな統合を目的として設計されており、適切なリソースクリーンアップを保証し、ボイラープレートを減らすことで、状態管理を簡素化します。複数のネストされたウィジェットでBlocを使用して状態処理を行うアプリに最適です。

用途

  • 子ウィジェットに Bloc インスタンスを提供する
  • 複雑なウィジェットツリーにおけるBlocのライフサイクルの管理
  • ネストされたUIコンポーネントにおける状態アクセスの簡素化
  • UIとビジネスロジックの明確な分離を実現する
  • 大規模なアプリケーションでの階層的な状態共有のサポート

主な機能

  • ウィジェットツリーを介した O(1) Bloc アクセス
  • 削除時の自動Bloc破棄
  • 最小限のボイラープレート
  • 組み込みライフサイクル管理
  • 任意の Bloc 実装と互換性があります

適している対象

  • Bloc パターンを使用する Flutter アプリ
  • 効率的な状態伝播を求める開発者
  • 自動リソースクリーンアップを必要とするプロジェクト
  • 深いウィジェット階層を持つ大規模なアプリケーション
  • クリーンな状態管理アーキテクチャを重視するチーム

注意事項

  • Bloc パターンの理解が必要です
  • 非ブロックステート管理には適していません
  • 浅い木構造で過剰に使用するとオーバーヘッドが発生する可能性があります
  • 破棄のための正しいウィジェットツリー構造に依存
  • Blocが主な状態コンテナである場合に限定される

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

bloc_provider Codemagic build status

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(
      // 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 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.

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト