Flutter:从向后导航的回调会产生“错误状态:调用close后无法添加新事件”

时间:2019-11-19 23:04:45

标签: flutter navigation bloc

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

          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”回调 列表页面所附的块上的“重置”事件,使块从存储库中获取子公司,就好像是第一次请求子公司一样。但是,它还不太可行。当子公司被编辑,保存并且用户向后导航时,不会发生任何不良情况,列表将成功更新。但是,当删除子公司时,向后导航会产生该主题中提到的错误。我是新手,不了解所有陷阱,也不了解好和坏做法。此回调是此错误的明确来源吗?我假设它绑定到辅助窗口小部件的特定实例,以便当列表元素更改时,窗口小部件和块都被放置了-是正确的吗?还是由于某些其他原因而不允许我在导航上调度任何团体事件?

1 个答案:

答案 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",
              ),
            )