【问题标题】:Flutter: Usage of Router arguments triggers build when navigating awayFlutter:导航离开时使用路由器参数触发构建
【发布时间】:2020-04-02 09:29:56
【问题描述】:

在我的 Flutter 应用程序中,我有 2 个页面:Page1 和 Page2。在 Page1 我有一个按钮,通过这行代码将用户带到 Page2:

Navigator.pushNamed(
  context,
  '/page2',
  arguments: someParam,
),

Page2 使用 Scaffold 和 AppBar,用户可以通过它们导航回 Page1。
在 Page2 我得到传递的参数:

ModalRoute.of(context).settings.arguments

此外,Page2 还执行一些只有当用户真的在 Page2 上时才有意义的任务。

我的观察是,当我在 Page2 上并点击返回箭头时,它确实触发了 Page1 和 Page2 的 build() 方法。

为什么这是一个问题(对我来说)?该应用程序还收到了推送通知,当用户打开这些通知时,他/她会被定向到 Page1。但是,如果用户在 Page2 上,将应用程序置于后台,然后打开通知,通过上述效果,它也会触发该后台任务 - 这对用户体验有很大的负面影响。

在离开 Page2 表单时如何防止它被 build()?或者,如果这是不可能的或一个坏主意,我如何在 Page2 的 build() 方法中检测当前调用是否来自导航?

感谢和问候!

【问题讨论】:

  • 阻止重建不是解决方案。见stackoverflow.com/questions/52249578/…
  • 感谢您的提示!不幸的是,我还没有(还)找到一种方法将触发器移出构建函数。但我想出了一个解决我的问题的方法(见我的回答)。

标签: flutter flutter-navigation


【解决方案1】:

好的,同时我可以想出一个解决方法来防止在导航时触发触发器:

if (ModalRoute.of(context).isActive) {
  fireTrigger();
}

也许这对遇到此问题的其他人有所帮助。

正如 Rémi 在 cmets 中指出的那样,拥有一个纯构建函数(因此没有副作用)将是一个首选的解决方案。

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 1970-01-01
    • 2020-02-12
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    相关资源
    最近更新 更多