簡體   English   中英

在帶有 riverpod 的 flutter 中,如何在導航堆棧中已有的頁面上更新 state

[英]In flutter with riverpod, how to update state on a page already in the navigation stack

我有一些遵循此流程的 flutter/riverpod/navigator 2.0 頁面。

項目列表頁面 -> 導航至 -> 編輯項目頁面 -> 后退按鈕 -> 項目列表頁面。

問題是當點擊后退按鈕時,項目列表不會用新內容更新,因為該頁面緩存在頁面的導航堆棧中。

對如何處理這種情況有什么建議嗎?

好的,我剛開始工作。 非常簡短的版本是在您的第一個表單上使用嵌套在 ProviderListener 中的 Consumer。 對我來說,第一種形式顯示了檢索到的模型列表。 在那個列表頁上我有...

  Widget build(BuildContext context) {
    return ProviderListener(
      onChange: (context, state) {
      // Below Model.save in provider sets state to
      // "Success(model)". This triggers here and we
      // List.update in provider to update fields in
      // the Model in the List. Then the Consumer
      // below triggers on "Data(model)" state and the
      // List refreshes and shows updated Model
      if (state is Success) {
          context.read(regionListNotifierProvider.notifier).update(state.model);
        }
      },
      provider: regionNotifierProvider,
      child: Consumer(builder: (context, watch, child) {
        final state = watch(regionListNotifierProvider);

在 List 頁面上,每個 Tile 都是可點擊的。 當您單擊時,它使用 Model 提供程序將 state 設置為您剛剛單擊的 Model。 然后它導航到表單。 表格顯示為 state 並查看您在列表中單擊的 Model 的信息。

在我的 ModelForm 中(您在其中編輯 Model 字段),當您保存它時,它會觸發其提供程序中的保存方法。 在那里,它觸發上面的更新,然后 ModelForm Navigator.pops 返回到列表頁面,然后上面的監聽器和消費者依次觸發,列表顯示更新的數據。

注意: ProviderListener 正在監聽 ModelForm 提供者,然后 Consumer 正在監聽 List 提供者。 跟隨? 這是終於奏效技巧!

注 2:這些都是無狀態小部件。 只需要 Riverpod 提供程序中的狀態。 他們什么都做。

注 3:這 2 個提供者來回交談。 列表將點擊的 model 提供給表單,當表單保存時,列表頁面會聽到並更新它的模型列表

如果您需要,我很樂意添加更多詳細信息:-)

這個例子不會幫助解決它嗎? 導航問題被簡化為操縱不可變集合。

使用嚴格類型的導航。 您可以使用navigate([Home(), Books(), Book(id: bookId)]); 而不是navigate('home/books/$bookId'); 在你的代碼中。

參見riverpod_navigator_example

暫無
暫無

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

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