flutter - 与riverpod一起颤抖,如何更新导航堆栈中已经存在的页面上的状态
问题描述
我有一些遵循此流程的 Flutter/riverpod/navigator 2.0 页面。
项目列表页面 -> 导航到 -> 编辑项目页面 -> 后退按钮 -> 项目列表页面。
问题是当一个人点击后退按钮时,项目列表不会用新内容更新,因为该页面缓存在页面导航堆栈中。
对如何处理这种情况有什么建议吗?
解决方案
好的,我刚刚开始工作!非常简短的版本是在您的第一个表单上使用嵌套在 ProviderListener 内的消费者。对我来说,第一种形式显示了检索到的模型列表。在那个列表页面上,我有...
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 都是可点击的。当您单击它时,它使用模型提供程序将状态设置为您刚刚单击的模型。然后它导航到表单。表单读取状态并查看您在列表中单击的模型的信息。
在我的 ModelForm (您在其中编辑模型字段)中,当您保存时,它会触发其提供程序中的保存方法。在那里,它触发上面的 .update,然后 ModelForm Navigator.pops 回到 List 页面,然后依次在上面的 Listener 和 Consumer 触发器,List 显示更新的数据。
注意: ProviderListener 正在监听 ModelForm 提供者,然后 Consumer 正在监听 List 提供者。跟随?这是最终奏效的诀窍!
注意 2:这些都是无状态小部件。只需要 Riverpod 提供程序中的状态。他们什么都做。
注意 3:这 2 个提供者来回交谈。列表将单击的模型提供给表单,当表单保存时,列表页面会听到并更新模型列表
如果您需要,我很乐意添加更多详细信息:-)
推荐阅读
- angular - 如何动态生成和显示嵌套的角度材料表
- jquery - 行不显示 Handsontable v1.13.0
- c - Clang 是病毒吗?
- node.js - 带有 NodeJs 端点的预检响应标头中缺少 Access-Control-Allow-Origin 的 CORS 错误
- python - 如何使用 python 的 pandas 按月汇总每个类别的计数?
- angular - 创建一些适配器以匹配第 3 方输入和输出
- python - 修复 tensorflow 安装错误的解决方案?
- jenkins-pipeline - 在 bitbucket 存储库中跳过构建状态通知
- c++ - 复杂的循环问题。也许不可能
- javascript - TypeError:无法读取未定义的属性“addListener”