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

使用GoRouter结合BottomNavBar时重复GlobalKey错误的修复问询

修复GoRouter BottomNavBar导航的GlobalKey重复错误

核心原因

错误提示的navbarKey被多个_BodyBuilder使用,本质是同一个GlobalKey<NavigatorState>被绑定到了多个Navigator实例上,通常由以下场景导致:

修复步骤

1. 确保GoRouter是全局单例

如果你的goRouter是在Widget的build方法或initState中创建的,每次组件重建都会生成新的ShellRoute,导致同一个_shellNavigatorKey被重复绑定。

将GoRouter的初始化移到组件外部,作为全局变量,确保只初始化一次:

final _rootNavigatorKey = GlobalKey<NavigatorState>(debugLabel: 'rootKey');
final _shellNavigatorKey = GlobalKey<NavigatorState>(debugLabel: 'navbarKey');

// 全局单例,禁止在build/initState内重复创建
final goRouter = GoRouter(
  initialLocation: LandingPage.route,
  navigatorKey: _rootNavigatorKey,
  debugLogDiagnostics: true,
  routes: [
    // 你的原有路由配置
  ],
);

2. 排查ScaffoldWithBottomNavBar内部代码

检查底部导航栏组件是否自行创建了Navigator,并且错误复用了_shellNavigatorKey。如果内部存在Navigator实例,需为它分配独立的GlobalKey,不能与ShellRoute的navigatorKey重复。

3. 解决热重载残留问题

热重载可能导致旧的Navigator实例未被正确销毁,引发key冲突。完全重启应用(而非热重载),验证错误是否消失。

4. 确认子路由pageKey的正确性

你的子路由中NoTransitionPage使用state.pageKey的方式是正确的,禁止手动指定固定key,确保每个页面的key由GoRouter自动生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:39