我有一个列表页面(有状态的窗口小部件),它是公司子公司的列表,还有一个单独的编辑页面(有状态的窗口小部件),用于编辑和删除特定子公司。列表的每一行都是一个小部件,该小部件具有一个按钮,可将用户带到编辑页面,用户也可以将其删除 相应的子公司。以下是此按钮的代码
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”回调 列表页面所附的块上的“重置”事件,使块从存储库中获取子公司,就好像是第一次请求子公司一样。但是,它还不太可行。当子公司被编辑,保存并且用户向后导航时,不会发生任何不良情况,列表将成功更新。但是,当删除子公司时,向后导航会产生该主题中提到的错误。我是新手,不了解所有陷阱,也不了解好和坏做法。此回调是此错误的明确来源吗?我假设它绑定到辅助窗口小部件的特定实例,以便当列表元素更改时,窗口小部件和块都被放置了-是正确的吗?还是由于某些其他原因而不允许我在导航上调度任何团体事件?
答案 0 :(得分:0)
使用“ then”关键字通常不起作用。 我在导航器之前使用了await,所以它将等待页面弹出,然后为您运行调度代码!
尝试一下:
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",
),
)