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

使用go_router如何避免已打开的路由重复跳转?

问题分析与解决办法

根本问题:导航API混用

你同时使用了Flutter原生的Navigator.push()和go_router的context.push(),这是错误的用法。go_router有自己独立的路由栈管理逻辑,和原生命令式导航混用会打乱它的栈结构,直接导致重复页面的问题。

修正方案

  • 统一导航方式:把所有原生Navigator.push()替换成go_router的context.push(),比如首页跳转到objects路由,改成context.push('/objects')(根据你的实际路由路径调整)。
  • 推送通知跳转优化:
    • 直接用context.go('/object/${objectId}'):这个方法会调整路由栈到目标路由——如果目标路由已经在栈顶,不会重复创建;如果在栈中其他位置,会清空上方的路由并跳转到该页面,避免重复。
    • 或者手动检查路由栈:通过GoRouter.of(context).routerDelegate.currentConfiguration获取当前路由栈,遍历判断目标路由是否存在,若存在则调用context.popUntil()定位到该路由,不存在再执行context.push()。

关于redirect的疑问

不需要用redirect处理这个场景。redirect是用来做全局路由守卫(比如未登录跳转登录页)的,用在重复路由的场景属于过度设计,完全没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:04:54