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の間で通信する良い方法はありますか?
この質問は11月18日に行われました。現在、ネストされたブロックをサポートする優れたブロックライブラリがすでに存在します。公式パブダートで https://pub.dartlang.org/packages/flutter_bloc を使用できます。これまでは、かなり複雑なアプリの開発に使用してきました。