【问题标题】:Flutter : Callback from back navigation produces "Bad state: Cannot add new events after calling close"Flutter:来自后退导航的回调产生“错误状态:调用关闭后无法添加新事件”
【发布时间】:2020-03-15 13:44:03
【问题描述】:

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

          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”回调 附加到列表页面的 bloc 上的“重置”事件使 bloc 从存储库中获取子公司,就好像它们是第一次被请求一样。然而,它并不完全奏效。当一个子公司被编辑、保存并且用户导航回来时,没有任何不好的事情发生,列表被成功更新。但是,当子公司被删除时,返回会产生主题中提到的错误。我是新来的,还不知道所有的陷阱,也不清楚好的和坏的做法。这个回调是这个错误的明确来源吗?我假设它绑定到附属小部件的特定实例,以便当列表元素更改时,小部件和块被处置 - 正确吗?还是因为其他原因,我不允许在导航上调度任何 bloc 事件?

【问题讨论】:

    标签: flutter navigation bloc


    【解决方案1】:

    使用“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",
                  ),
                )
    

    【讨论】:

    • 试过了,没用。是的,async 和 await 比 Futures 更好,更易读,但从技术上讲,它们应该是相同的,或者不是?
    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2022-12-31
    • 1970-01-01
    相关资源
    最近更新 更多