Flutter Auto-Route 6.0.5版本升级后旧代码失效,求最新实现示例
AutoRoute 6.0.5 适配代码及使用方式
AutoRoute 6.x版本做了不少API变更,你之前的写法已经不再适用,下面是适配后的完整代码示例:
1. 路由配置文件(router.dart)
首先确保每个页面类都添加@RoutePage()注解,然后修改路由配置:
import 'package:auto_route/auto_route.dart'; import 'package:your_app/screens/animated_splash_screen.dart'; import 'package:your_app/screens/change_profile_pic.dart'; // 替换旧的@MaterialAutoRouter @AutoRouterConfig(replaceInRouteName: 'Page,Route') class AppRouter extends $AppRouter { @override List<AutoRoute> get routes => [ // 初始路由配置不变,但page直接传页面类(需提前加@RoutePage()) AutoRoute(page: AnimatedSplashScreen, initial: true), AutoRoute(page: ChangeProfilePic), ]; }
2. 页面类注解
在每个路由页面的类上添加@RoutePage(),比如AnimatedSplashScreen.dart:
import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; @RoutePage() // 必须添加这个注解 class AnimatedSplashScreen extends StatelessWidget { const AnimatedSplashScreen({super.key}); @override Widget build(BuildContext context) { // 你的页面代码 return const Scaffold(); } }
3. 生成路由代码
执行以下命令生成路由相关的代码文件:
flutter pub run build_runner build --delete-conflicting-outputs
4. 应用初始化路由
在main.dart中配置路由:
import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'router.dart'; // 导入你的路由配置文件 void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp.router( // 替换旧的onGenerateRoute等配置 routerDelegate: AutoRouterDelegate(AppRouter()), routeInformationParser: AppRouter().defaultRouteParser(), title: '你的应用名称', ); } }
5. 路由跳转方式
在页面中跳转路由有两种常用方式:
方式一:使用AutoRouter实例
// 跳转到ChangeProfilePic页面 AutoRouter.of(context).push(const ChangeProfilePicRoute());
方式二:使用扩展方法(推荐)
// 需确保导入了auto_route/auto_route.dart context.pushRoute(const ChangeProfilePicRoute());
如果页面需要传递参数,比如ChangeProfilePic接收用户ID:
@RoutePage() class ChangeProfilePic extends StatelessWidget { final String userId; const ChangeProfilePic({super.key, required this.userId}); @override Widget build(BuildContext context) { return Scaffold(body: Text(userId)); } }
跳转时直接传参:
context.pushRoute(ChangeProfilePicRoute(userId: 'user_123'));
内容的提问来源于stack exchange,提问作者Roxx
相关产品推荐
相关产品推荐

