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
我对 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