Flutter:使用路由器参数会在离开时触发构建

Flutter: Usage of Router arguments triggers build when navigating away

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

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

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

ModalRoute.of(context).settings.arguments

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

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

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

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

谢谢和问候!

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

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

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

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