假设有一个称为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"),
          ),
        ),
      ),
    );
  }
}

编辑:总而言之,在Floc和Bloc之间进行通信很方便,但是在Bloc和Bloc之间是否有很好的通信方式?

最佳答案

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

关于dart - Flutter-如何构造多个嵌套的BLoC?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53358894/

10-11 14:56