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

Flutter使用auto_route时guard路由守卫未触发拦截怎么解决?

auto_route Guard未触发排查方案

路由配置校验

  • 确认Guard已正确绑定到目标路由:使用注解配置的场景下,检查@RoutePage(guards: [AuthGuard])中的Guard类名是否拼写正确,没有误写其他类
  • 确认路由生成命令已执行:每次修改路由注解配置后,必须运行dart run build_runner build生成最新的路由代码,改动才会生效
  • 检查导航目标路由是否匹配绑定Guard的路由:排查是否存在同名路由、子路由配置错误,导致导航时命中了未绑定Guard的路由项;嵌套路由场景下需确认Guard绑定层级正确,父路由Guard仅在进入父路由时触发,子路由单独绑定的Guard不会被父路由导航触发

Guard实现校验

  • 确认Guard类正确继承AutoRouteGuard父类,没有拼写错误
  • 确认重写的onNavigation方法签名完全正确:完整签名为@override void onNavigation(NavigationResolver resolver, StackRouter router),方法名错误会导致逻辑无法被回调
  • 可在onNavigation方法第一行加入打印日志或者断点,确认是否真的未执行,避免因方法内部提前return、未调用resolver.next()/resolver.redirect()导致的假未触发问题

导航调用校验

  • 确认导航使用的是auto_route提供的API:比如context.pushRoute(目标路由)、router.navigate(目标路由),Flutter原生的Navigator.push相关API不会触发auto_route的Guard逻辑
  • 确认导航传入的路由常量是绑定了Guard的路由对应的生成类,不是字符串别名或者其他路由常量

全局配置校验

  • 确认初始化AppRouter时,已传入Guard的实例:注解仅绑定路由和Guard的关联关系,实际运行需要在AppRouter(authGuard: AuthGuard())中传入实例,Guard才会被调用
  • 排查是否存在全局路由重定向逻辑,在目标路由Guard执行前就拦截了导航请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:07