Flutter - 如何构建多个嵌套的 BLoC?
Posted
技术标签:
【中文标题】Flutter - 如何构建多个嵌套的 BLoC?【英文标题】:Flutter - How to architect multiple nested BLoC? 【发布时间】:2019-04-20 21:12:47 【问题描述】:假设有一个名为 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"),
),
),
),
);
编辑:综上所述,flutter中Bloc和widget通信比较方便,但是Bloc和Bloc之间有没有好的通信方式呢?
【问题讨论】:
我正在寻找相同的“如何进行黑白交流”。这篇文章可能对medium.com/@danaya/…有帮助 【参考方案1】:这个问题是在 11 月 18 日提出的。目前,已经有一个很棒的 bloc 库支持嵌套 bloc。您可以在官方 pub dart 中使用https://pub.dartlang.org/packages/flutter_bloc。到目前为止,我一直在用它来开发一个相当复杂的应用程序,它很棒。
【讨论】:
以上是关于Flutter - 如何构建多个嵌套的 BLoC?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter BLoC:使用嵌套的 StreamBuilders 是一种不好的做法吗?