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
相关产品推荐
相关产品推荐

