web-dev-qa-db-ja.com

Flutter-複数のネストされたBLoCを構築する方法

PreferenceBlocと呼ばれるトップレベルのBLoCがあり、そのBLoCの中にPageBlocと呼ばれる別のBLoCがあるとします。 PageBloc内のロジックがPreferenceBlocからの値ストリームを必要とする場合(つまり、新しいページを作成するときにページ構成を知る必要がある場合)、これをどのように設計すればよいですか?

コードサンプル:

class PreferencesBloc{
  final preferencesService=PreferencesService();

  // Output interfaces of Bloc
  ValueObservable<String> get mainDir => _mainDir.distinct().shareValue(seedValue: '/');
  final _mainDir = BehaviorSubject<String>(seedValue: '/');

  // Input interfaces of Bloc...
  // .........
}
class PageBloc{
  final List<PageInfo> _pageInfos=<PageInfo>[];
  // Output interfaces of Bloc...
  // .........

  // Input interfaces of Bloc...
  Sink<int> get pageCreation => _pageCreationController.sink;
  final _pageCreationController = StreamController<int>();

  pageBloc(){
    _pageCreationController.stream.listen(_handleCreation);
  }
  void _handleCreation(int pos){
    _pageInfo.insert(pos, PageInfo('I need the mainDir here!')); //Need info from PreferencesBloc!!!
  }
}

class PreferencesProvider extends InheritedWidget{
  final PreferencesBloc preferencesBloc;
  //...
}
class PageProvider extends InheritedWidget{
  final PageBloc pageBloc;
  //...
}



void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return PreferencesProvider(
      child: PageProvider(
        child: MaterialApp(
          home: Scaffold(
            body: Text("test"),
          ),
        ),
      ),
    );
  }
}

編集:要約すると、Blocとウィジェットの間でフラッターで通信するのが便利ですが、BlocとBlocの間で通信する良い方法はありますか?

5
First_Strike

この質問は11月18日に行われました。現在、ネストされたブロックをサポートする優れたブロックライブラリがすでに存在します。公式パブダートで https://pub.dartlang.org/packages/flutter_bloc を使用できます。これまでは、かなり複雑なアプリの開発に使用してきました。

2
Haqqi