Flutter BLoC 监听其他 bloc

Flutter BLoC listening to other blocs

我对 Flutter 还很陌生,对使用 BLoc 也很陌生。

我遇到这样一种情况,我需要让一个 BLoc 响应其他两个 BLoc 的状态变化。

BLoC 的设置如下:

    body: MultiBlocProvider(
      providers: [
        BlocProvider(
          create: (context) => NeighborBloc(repository: pcRepository),
        ),
        BlocProvider(
          create: (context) => FamilyBloc(repository: pcRepository),
        ),
        BlocProvider(
          create: (context) => RegionBloc(
              repository: repository,
              neighborBloc: BlocProvider.of<NeighborBloc>(context),
              familyBloc: BlocProvider.of<FamilyBloc>(context)),
        ),
      ],

RegionBloc 的构造函数是:

RegionBloc(
   {@required this.neighborBloc,
   @required this.familyBloc,
   @required this.repository})
   : assert(repository != null),
     super(RegionEmpty()) {
 print("NB: " + neighborBloc .toString());
 print("FB: " + familyBloc .toString());
 _neighborBlocSubscription = neighborBloc.listen((neighborState) {
   if (neighborState is NeighborSelected) {
     Postcode postcode = (neighborState as NeighborSelected).postcode;
     add(NeighborSelected(postcode));
   }
 });
 _familyBlocSubscription = familyBloc.listen((familyState) {
   if (familyState is FamilySelected) {
     Postcode postcode = (familyState as FamilySelected).postcode;
     add(FamilySelected(postcode));
   }
 });
}

两条打印语句的结果是: 注意:'NeighborBloc' 的实例 FB:'FamilyBloc'

的实例

我有一个 BlocObserver 设置,我得到了 neighborState 的转换

onTransition  NeighborBloc, transition: Transition { currentState: NeighborLoading, event: 
SelectNeighbor, nextState: NeighborSelected }
onChange NeighborBloc, Change { currentState: NeighborLoading, nextState:      
    NeighborSelected }

从未添加 RegionBloc->NeighborSelection。的 BlocBuilder RegionBloc 是:

return BlocBuilder<RegionBloc, RegionState>(builder: (context, state) {
  if (state is RegionEmpty) {
    return Text('Empty Region');
  }
  if (state is RegionLoaded) {
    return Text('RegionsLoaded');
  }
  if (state is NeighborSelected) {
    return Text('NeighborSelected');
  }
  if (state is FamilySelected) {
    return Text('FamilySelected');
  }
  //return Center(
  //  child: CircularProgressIndicator(),
  //);
  setPolygon();
  return Container(

我读过这个 link,我想我正在这样做:

我分不清自己没有做什么或做错了什么。

BlocBuilder<RegionBloc, RegionState> 只会对 RegionState 做出反应。

您需要创建一个 BlocBuilder<NeighborBloc, NeighborState> 来响应 NeighborSelected