【问题标题】:Flutter Hot Reload causing Navigator.push() to be called disrupting the state of appFlutter Hot Reload 导致调用 Navigator.push() 破坏应用程序的状态
【发布时间】:2020-08-16 08:56:34
【问题描述】:

在我的应用程序中,我有一个登录页面,其中一些异步数据库活动在完成时执行,主页是它导航到的位置。 主页还有许多其他屏幕正在创建过程中。 一个这样的屏幕是显示搜索项目列表的搜索页面。 问题是当我对搜索页面进行更改并进行热重新加载时,登录页面再次将应用导航到主页,并且 SearchPage 的状态丢失了。

如何在不丢失热重载时 SearchPage 状态的情况下实现这一点? 如果在整个应用生命周期中只调用一次数据库初始化活动,并且在重新启动应用之前不再调用,那就更好了。

【问题讨论】:

  • Hot reload 有助于节省您在设备上重新打包和重新下载应用程序的时间,状态丢失在实际生产场景中有些无关紧要...?
  • 是的,没错,但我打算使用热重载来缩短开发时间,因为应用程序很快就会嵌套很多屏幕,如果不保留状态,那对我们来说是一个很大的挫折.
  • 我认为放置一个变量标志来指示是否第一次调用它来控制导航器可能会起到作用。
  • 发布您的着陆页的代码,我想我知道您的问题是什么,但我不能 100% 确定
  • 放置标志没有帮助,但有状态的小部件可以。

标签: flutter hot-reload


【解决方案1】:

我大概可以通过以下方式解决:

在我的 LandingPage(应用程序的第一个屏幕)上,将其从 Stateless Widget 转换为 Stateful Widget 并在其中执行以下操作 -

@override
initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) => initData(context));
}

initData(){
  //do some async activities
  //After the completion of them
  // Navigate to a desired screen
  Navigator.push(...//)
}

这确保了我的 initData 方法在整个过程中只运行一次,直到重新启动应用程序,因此也不会出现意外导航。

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 2019-09-07
    • 2019-02-02
    • 2022-07-21
    • 2020-12-06
    • 2021-09-30
    • 2022-08-10
    • 2018-10-15
    • 2011-04-04
    相关资源
    最近更新 更多