Flutter 2.5.2环境下auto_route嵌套路由无法跳转问题求解
Flutter auto_route嵌套路由报错解决方案
报错原因排查
你遇到的Router can not navigate to报错和路由文件命名无关,核心是三处常见配置问题:
- 承载嵌套子路由的
HomePage缺少子路由渲染容器AutoRouter,auto_route找不到嵌套导航的上下文 - 路由跳转时调用的路由类名和你配置的
name属性不匹配 - 存在路由代码修改后未重新生成的缓存问题
修复步骤
1. 修正HomePage代码
需要给HomePage添加@RoutePage注解,同时在布局中加入AutoRouter作为子路由的渲染载体,跳转时使用你配置的BooksRouter而非错误的BooksRoute:
import 'package:flutter/material.dart'; import 'package:auto_route/auto_route.dart'; import 'package:flutteraoutroutepackage/routes/app_router.gr.dart'; @RoutePage() class HomePage extends StatelessWidget { const HomePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( // AutoRouter用来渲染嵌套的子路由页面 body: const AutoRouter(), floatingActionButton: ElevatedButton( child: const Text('Go to Lists'), onPressed: () => context.router.push(const BooksRouter()), ), ); } }
2. 重新生成路由代码
执行以下命令重新生成auto_route的相关代码,清除旧代码缓存导致的异常:flutter packages pub run build_runner build --delete-conflicting-outputs
3. 确认根路由配置正确
检查main.dart中根路由的配置是否符合要求:
import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'routes/app_router.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { MyApp({super.key}); final _appRouter = AppRouter(); @override Widget build(BuildContext context) { return MaterialApp.router( routerDelegate: _appRouter.delegate(), routeInformationParser: _appRouter.defaultRouteParser(), ); } }
执行完以上操作后重新运行项目即可解决报错。
内容的提问来源于stack exchange,提问作者yetesfa
相关产品推荐
相关产品推荐

