颤振:来自后退导航的回调产生"Bad state: Cannot add new events after calling close"



我有一个列表页面(有状态小部件(,它是一个公司的子公司列表,还有一个单独的编辑页面(有态小部件(用于编辑和删除特定的子公司。列表的每一行都是一个小部件,它有一个按钮,可以将用户带到编辑页面,在那里他也可以删除相应的子公司。下面是这个按钮的代码

FlatButton(
onPressed: () => Navigator.of(context).push(MaterialPageRoute(
builder: (context) =>
BlocProvider<SubsidiaryEditBloc>(
builder: (BuildContext context) => SubsidiaryEditBloc(),
child: SubsidiaryEditPage(subsidiary: subsidiary)
) 
)).then((value) {
subsidiaryListBloc.dispatch(Reset()); 
}),
child: Text(
"Edit",
),
)

编辑/删除完成后,用户会返回,我希望列表反映更新/删除。为了实现这一点,我在"push"操作上使用"then"回调附加到列表页的集团上的"重置"事件,使集团从存储库中提取子公司,就像第一次请求子公司一样。然而,它并不完全奏效。当一个子系统被编辑、保存,并且用户导航回来时,没有什么不好的事情发生,列表被成功更新。但当一个子公司被删除时,导航返回会产生主题中提到的错误。我是新手,还不知道所有的陷阱,也不清楚好的和坏的做法。这个回调是这个错误的明确来源吗?我假设它绑定到子小部件的特定实例,这样当列表元素发生变化时,小部件和块就会被处理掉——这是正确的吗?或者,出于其他原因,我不被允许在导航上发送任何集团活动?

使用"then"关键字通常不起作用。我在导航器之前使用wait,所以它会等待页面弹出,然后运行调度代码!

试试这个:

FlatButton(
onPressed: () async{
await Navigator.of(context).push(MaterialPageRoute(
builder: (context) =>
BlocProvider<SubsidiaryEditBloc>(
builder: (BuildContext context) => SubsidiaryEditBloc(),
child: SubsidiaryEditPage(subsidiary: subsidiary)
) 
));
subsidiaryListBloc.dispatch(Reset()); 
},
child: Text(
"Edit",
),
)

相关内容

最新更新