You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GoRouter跳转至其他页面时触发当前页面不必要重建的问题求助

GoRouter跳转至其他页面时触发当前页面不必要重建的问题求助

最近在使用GoRouter开发Flutter应用时碰到了一个很困扰的问题,想跟大家请教下解决方案。

情况是这样的:我在Widget的build方法里调用了GoRouterState.of(context)来获取路由状态,比如从extras里拿参数,这部分在进入页面时工作正常。但当我调用goNamed("somewhere-else")跳转到其他页面时,当前页面的build方法居然会被重新触发一次,导致了不必要的重建。

举个具体的例子,我有这样一个页面组件:

class PageOne extends WatchingStatefulWidget {
  const PageOne({super.key});

  @override
  GameViewState createState() => PageOneState();
}

class PageOneState extends State<PageOne> {
  @override
  Widget build(BuildContext context) {
    print("building page one");
    final _ = GoRouterState.of(context);
    // 这里会从extras里拿参数并处理业务逻辑
    return ...;
  }
}

当我第一次跳转到/page-one时,日志正常输出building page one;但当我调用goNamed("somewhere-else")跳转到/page-two时,日志里居然会先打印一次building page one,再打印building page two,就像这样:

[GoRouter] going to /page-one
flutter: building page one
[GoRouter] going to /page-two
flutter: building page one
flutter: building page two

这种情况会导致应用出现状态不一致的问题:模型层已经确认用户已经跳转到新页面了,但原来的页面还在执行重建逻辑,会在错误的状态下尝试构建,进而引发各种奇怪的问题。

想请问下各位,有没有办法阻止当前页面在跳转到其他页面时被触发重建呢?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 08:08:06