簡體   English   中英

Flutter:來自后退導航的回調產生“錯誤的 state:調用關閉后無法添加新事件”

[英]Flutter : Callback from back navigation produces “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”回調,在該操作中我在附加到列表頁面的 bloc 上調度“Reset”事件,這使得 bloc 從存儲庫中獲取子公司,就好像它們是第一次被請求一樣。 然而,它並不完全奏效。 當一個子公司被編輯、保存並且用戶導航回來時,沒有任何不好的事情發生,列表被成功更新。 但是,當子公司被刪除時,導航返回會產生主題中提到的錯誤。 我是 flutter 的新手,還不知道所有的陷阱,也不清楚好的和壞的做法。 這個回調是這個錯誤的明確來源嗎? 我假設它綁定到附屬小部件的特定實例,以便當列表元素更改時,小部件和塊被處置 - 對嗎? 或者由於其他原因,我是否不允許在導航上發送任何 bloc 事件?

使用“then”關鍵字通常不起作用。 我在導航器之前使用等待,所以它會等待頁面被彈出,然后運行你調度代碼!

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM