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

Flutter go_router如何实现上下文弹出与返回上一页面?

解决GoRouter中返回页面报错的问题

问题根源

你用context.go("/secondPage")跳转页面时,这个方法是直接替换整个页面栈——相当于把之前的页面都从栈里移除,只保留当前跳转的页面。所以当你调用context.pop()时,栈里已经没有其他页面了,自然会触发断言错误。

正确的实现方式

1. 前进跳转:用push替代go

要往页面栈里添加新页面(保留原页面),应该用context.push("/secondPage"),这样原页面会留在栈中,后续pop就能正常返回上一页。

2. 普通返回:用context.pop()

当你用push跳转后,在目标页面调用context.pop()就能直接回到上一页,不会报错。

3. 示例代码

路由配置
final GoRouter router = GoRouter(
  initialLocation: "/", // 初始路由设为首页
  routes: [
    GoRoute(
      path: "/",
      builder: (context, state) => const HomePage(),
    ),
    GoRoute(
      path: "/secondPage",
      builder: (context, state) => const SecondPage(),
    ),
  ],
);
首页跳转逻辑
// HomePage中的跳转按钮
ElevatedButton(
  onPressed: () => context.push("/secondPage"),
  child: const Text("跳转到第二页"),
)
第二页返回逻辑
// SecondPage中的返回按钮
ElevatedButton(
  onPressed: () => context.pop(),
  child: const Text("返回首页"),
)

4. 进阶场景:返回指定页面

如果需要从深层页面直接回到某个特定页面(比如首页),可以用popUntil方法:

// 回到首页,弹出中间所有页面
context.popUntil((route) => route.settings.name == "/");
// 或者用GoRouterState判断
context.popUntil(GoRouterState.of(context).location == "/");

如果只是想直接切换到首页且不需要保留中间页面,也可以用context.go("/"),但这种方式会替换整个页面栈,后续pop同样会报错,适合不需要返回的场景。

内容的提问来源于stack exchange,提问作者Srasti Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:15:53