我在使用 Flutter_bloc 注册BlocListener时遇到问题
我有 3 个小部件,比如说Widget1、Widget2和Widget3。在作为初始路由的 Widget1 中,我已经为 SnackBar 注册了BlocListener:
class Widget1 extends StatelessWidget{
Widget build(BuildContext context) {
return BlocListener<SnackbarBloc, SnackbarState>(
listener: (context, state) {
if (state is SnackbarSuccess) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('${state.message}'),
backgroundColor: Colors.green,
));
}
if (state is SnackbarError) {
Scaffold.of(context)..showSnackBar(SnackBar(
content: Text('${state.message}'),
backgroundColor: Colors.red,
));
}
},
child: Container();
)
}
}
所以当我创建我的 Widget1 时,我注册了我的 SnackBarListener。在我的应用程序中,我有一个 NavigationBloc 和 Listener 用于处理导航,例如:
BlocListener<NavigationBloc, NavigationState>(
listener: (context, state) {
if (state is Widget1) {
Navigator.of(context).pushNamed('/widget1');
}
if (state is Widget2) {
Navigator.of(context).pushNamed('/widget2');
}
if (state is Widget3) {
Navigator.of(context).pushNamed('/widget3');
}
},
)
有一次我将页面更改为 Widget2,然后使用 NavigationBloc 返回 Widget1,然后使用 Navigator.of(context).pushNamed('/widget1'); Widget1 中的snackBar 监听器被重新注册,所以如果我尝试打开我的snackbar 函数:
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('${state.message}'),
backgroundColor: Colors.green,
));
为了更清楚,我创建了一个要点,这是我的问题的一个例子
https://gist.github.com/loreberti89/a916d03ed20ea10484fae3cb001964cf
被调用两次,然后是 3 次,依此类推。
我应该如何处理这些情况?