繁体   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