Flutter升级至^2.0.0后auto_route包router.gr.dart文件报错问题
Flutter 2.0升级后auto_route生成代码报错解决方案
你遇到的报错本质是旧版本auto_route不兼容Flutter 2.0的空安全规范及API变更,旧版生成的router.gr.dart中使用的ExtendedNavigator、工具方法均已被废弃,按照以下步骤操作即可修复:
步骤1:升级auto_route相关依赖
修改项目pubspec.yaml中的依赖配置,替换为适配Flutter 2.0+空安全的版本:
dependencies: flutter: sdk: flutter auto_route: ^3.2.4 # 可选择更高适配你Flutter版本的兼容版本 dev_dependencies: flutter_test: sdk: flutter auto_route_generator: ^3.2.3 build_runner: ^2.1.7
修改后执行flutter pub get安装依赖。
步骤2:修改原路由定义文件(非生成文件)
你自己编写的路由配置文件(一般命名为router.dart)需要适配新版注解规则:
- 移除旧的
ExtendedNavigator相关配置 - 路由注解统一使用
@MaterialAutoRouter/@CupertinoAutoRouter,声明所有路由页面 - 页面参数可通过
@pathParam、@QueryParam注解声明,空安全类型按实际需求标注可空(?)或必填(required)
示例配置参考:
import 'package:auto_route/auto_route.dart'; import 'xxx.dart'; // 导入所有页面文件 part 'router.gr.dart'; @MaterialAutoRouter( replaceInRouteName: 'Page,Screen,Route', routes: <AutoRoute>[ AutoRoute(page: LoginScreen, initial: true), AutoRoute(page: Localisation), AutoRoute(page: SplashScreen), // 剩余所有路由都按上面格式声明 ], ) class AppRouter extends _$AppRouter {}
步骤3:重新生成路由代码
首先删除旧的router.gr.dart文件,然后在项目根目录执行构建命令:
flutter packages pub run build_runner build --delete-conflicting-outputs
执行完成后会自动生成新版本的router.gr.dart,原来的ExtendedNavigator、hasInvalidArgs等报错都会消失。
步骤4:适配新版导航调用方式
旧版基于字符串路径的导航方式已废弃,需替换为新版API:
- 旧写法:
ExtendedNavigator.of(context).pushNamed(AppRouter.loginScreen) - 新写法:
context.pushRoute(const LoginRoute())或AutoRouter.of(context).push(const LoginRoute())
带参数的路由直接将参数传入Route类的构造方法即可,无需手动封装参数对象。
其他注意事项
如果还有@required相关的报错,是因为Flutter 2.0+已将@required改为内置关键字required,无需加@符号,新版auto_route生成的代码会自动适配该规则。
内容的提问来源于stack exchange,提问作者Alex le Goff
相关产品推荐
相关产品推荐

