【问题标题】:Preserve page state while using Navigator使用 Navigator 时保留页面状态
【发布时间】:2020-05-16 23:54:32
【问题描述】:

我有一个显示四个不同页面的 PageView( ) 和一个用于导航到这些页面的 BottomNavigationBar。当我使用 Navigator.push() 推送第二条路线并使用 Navigator.pop 将其弹出时,我在第一页上有一个 FloatingActionButton 初始页面重新构建,当我在第四页上使用它时也会发生同样的事情,返回第一个屏幕,而不是与我在该页面上执行操作时相同的屏幕。那么如何在保留该页面状态的同时导航回同一页面呢?

我使用 AutomaticKeepAliveClient mixin 在通过底部导航栏导航时保留页面的状态,但使用 Navigator 无法做到这一点。

This article by Andrea Bezzito 确实涵盖了其中的某些部分,但我不确定这是否正是我想要的。所以想寻找替代解决方案(如果有的话)。

谢谢。

【问题讨论】:

    标签: flutter state-management flutter-provider flutter-navigation flutter-state


    【解决方案1】:

    您要查找的内容称为Provider。这是一个非常简单的示例,说明如何使用提供程序。 https://github.com/m-Skolnick/provider_example_flutter

    【讨论】:

    • 嘿@mskolnick !感谢您的回复。我在我的应用程序中使用了提供程序,并且在许多地方使用它来提供值以及使用 Changenotifier 为我的 ListView.builder() 维护 ListView 项目,但我不确定我错过了什么.我是否也应该使用 Provider 通过我的 PageView 小部件显示我的页面?那是我哪里出错了吗?
    • 啊,明白了。我可能误解了你的问题。我在想你在返回页面时无法保存页面的状态。这就是 Provider 可以提供帮助的地方。就每个选项卡都有单独的导航堆栈而言,您链接到的文章似乎是一个很好的解决方案。
    • 两者兼而有之,我在通过 Navigator 返回时无法保存状态,这导致我的屏幕重建,这是无用的重建,因为它会再次从 Firestore 获取这些文档。我尝试使用 IndexedStack 而不是 PageView,它适用于示例应用程序,但不适用于我的应用程序,因为我使用 Navigator 进行导航时丢失了。状态仅保留在底部导航栏中
    • 听起来您没有保存页面的状态。即.. 重建无状态小部件时,数据将始终被清除,除非您从有状态对象中提取状态。如果您想在重建之间保留页面的状态,请查看我链接到的提供程序存储库。
    • 感谢您的宝贵时间,但我发现了我的错误,我有一个 Future 构建器,它显示一个表单或主屏幕,具体取决于用户是否已经注册,以便 Futurebuilder 正在重建我的小部件树每次都会检查用户是否存在。所以我拿出 FutureBuidler,现在不必要的重建被保存了,我的状态也被保留了。
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多