在使用 Flutter Bloc 的过程中可能会遇到 BlocListener 混淆问题,即多个 BlocListener 监听同一个 Bloc 时会导致不同的监听器同时触发。解决此问题的方法是每个 BlocListener 绑定不同的条件,以此保证它们不会同时触发。
以下是一个示例:
class MyWidget extends StatelessWidget {
final MyBloc myBloc;
MyWidget({Key key, this.myBloc}) : super(key: key);
@override
Widget build(BuildContext context) {
return BlocListener(
bloc: myBloc,
condition: (previousState, currentState) {
return previousState.someValue != currentState.someValue;
},
listener: (context, state) {
// do something when the state changes
},
child: Container(),
);
}
}
在以上示例中,我们通过传入 condition 参数使每个 BlocListener 绑定不同的条件,只要 previousState.someValue 不等于 currentState.someValue,就会触发 listener 回调函数,不同的 BlocListener 之间不会冲突。