我有一个显示四个不同页面的PageView()和一个用于导航到这些页面的BottomNavigationBar。当我使用Navigator.push()推动第二条路线,并使用Navigator.pop将其弹出以再次显示初始页面时,我在第一页上有一个FloatingActionButton,再次在第四页上使用它时,也会发生相同的情况,返回第一个屏幕,而不是与我在该页面上执行操作的屏幕相同的屏幕。那么如何在保留该页面状态的同时导航回到同一页面呢?
我使用了AutomaticKeepAliveClient mixin在浏览底部导航栏时保留页面的状态,但是无法使用Navigator做到这一点。
Andrea Bezzito的这篇文章 确实涵盖了其中的某些部分,但是我不确定那是否正是我想要的。因此想寻找其他解决方案(如果有)。
谢谢。
您正在寻找的叫做Provider
。这是一个如何使用提供程序的非常简单的示例。https://github.com/m-Skolnick/provider_example_flutter
嘿@mskolnick!感谢您的回应。我在应用程序中使用了提供程序,并且在很多地方都使用了提供程序来提供值,并使用Changenotifier来维护ListView.builder()的ListView项目,但是我不确定我缺少哪一点。我是否也应该使用Provider通过PageView小部件显示页面?那是我出问题了吗?
哎呀 我可能误解了你的问题。我以为您在返回页面时无法保存页面状态。这是提供者可以提供帮助的地方。至于每个选项卡都有一个单独的导航堆栈,链接到的文章似乎是一个不错的解决方案。
两者兼而有之,我在通过导航器返回时无法保存状态,这会导致屏幕重建,这是无用的重建,因为它将再次从firestore中获取这些文档。我尝试使用IndexedStack而不是PageView,它在示例应用程序中有效,但在我的应用程序中无效,就像我使用Navigator导航时丢失的那样。状态仅保留在BottomNavigationbar中
听起来您没有保存页面状态。即..重建无状态小部件时,将始终清除数据,除非您从有状态对象中提取状态。如果要在两次重建之间保留页面的状态,请查看我链接到的该提供程序回购。
感谢您的时间,但是我发现了我的错误,我有一个Future生成器,它显示一个表单或主屏幕,这取决于以下事实:用户是否已经注册,因此Futurebuilder每次都在重建我的小部件树时,检查用户是否在场。所以我取出FutureBuidler,现在保存了不必要的重建并保留了我的状态。