[英]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');
在你的代碼中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.