【问题标题】:Flutter - How to architect multiple nested BLoC?Flutter - 如何构建多个嵌套的 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/…有帮助

标签: dart flutter rxdart


【解决方案1】:

这个问题是在 11 月 18 日提出的。目前,已经有一个很棒的 bloc 库支持嵌套 bloc。您可以在官方 pub dart 中使用https://pub.dartlang.org/packages/flutter_bloc。到目前为止,我一直在用它来开发一个相当复杂的应用程序,它很棒。

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2019-12-10
    • 2020-07-18
    • 1970-01-01
    • 2019-09-04
    • 2021-08-28
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多