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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:47:35