【发布时间】:2021-10-30 21:17:43
【问题描述】:
我有两个 BLoC,需要监听其中一个的状态变化,以便将事件添加到另一个并构建 UI。
我觉得用代码更容易解释:
@override
Widget build(BuildContext context) {
return BlocProvider<BlocA>(
create: (context) => BlocA(), <------ Create BlocA
child: BlocProvider<BlocB>(
create: (context) => BlocB(), <---- Create BlocB
child: BlocListener<BlocA, StateA>(
listener: (context, state) {
if (state is StateA) {
context.read<BlocB>().add(EventB()); <--- When BlocA is ready, add EventB to BlocB
}
},
child: BlocBuilder<BlocB, StateB>(
builder: (context, state) {
if (state is StateBInitial) {
return Container(color: Colors.yellow); <-- shows initial as expected
}
if (state is StateBSuccess) {
return Container(color: Colors.green); <-- success is never triggered
}
return Container(color: Colors.red);
),
),
),
);
}
在上面的示例中,我创建了 2 个 BLoC,BlocA 和 BlocB。 我将它们添加到提供程序中,然后创建一个 BlocListener 来侦听 BlocA 更改并将事件添加到 BlocB。
问题是 BlocBuilder 在初始状态之后永远不会触发。 我可以在调试中看到 BlocListener 添加的 Event 已注册并获取并生成数据,但 BlocBuilder 即使状态已更改也不会触发。
就好像 BlocListener 正在调用不同的 BlocB。
【问题讨论】:
-
你能添加你的状态对象吗?它可能是由不变性问题引起的。 @Joel Broström
-
也许你的集团接受你的状态,但如果它自上次事件以来没有改变,就不会屈服。如果它不是不可变的,或者如果您使用 Equatable,您忘记将属性添加到
props,则可能会发生这种情况 -
感谢您的输入,但不幸的是代码已消失。我可以保证所有的道具都准备好了。我之前遇到过问题并多次检查过。
标签: flutter dart bloc flutter-bloc