为什么 AutoRoute 代码生成器创建一个 _$$AppRouter class 而不是 AppRouter class

Why does AutoRoute code generator create a _$$AppRouter class instead of AppRouter class

当尝试在 Flutter 上使用 auto_route 包时,代码生成器创建了与预期不同的结果。代码生成的注释非常简单:

import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';

import '../features/sign_in/sign_in_page.dart';

part 'router.gr.dart';

@MaterialAutoRouter(
  routes: <AutoRoute>[AutoRoute(page: SignInPage, initial: true)],
)
class $AppRouter {}

这应该会生成一个 AppRouter class 然后可以在代码中使用:

import '../routes/router.dart';

class AppWidget extends StatelessWidget {
  AppWidget({Key? key}) : super(key: key);

  //Instantiate the AppRouter
  final AppRouter _appRouter = AppRouter();

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return 
      //use _appRouter
      //All the code...

    
  }
}

但是这会标记一个错误,表示 AppRouter class 未定义,并且未使用导入。

所以我认为生成的代码可能是问题所在:

// **************************************************************************
// AutoRouteGenerator
// **************************************************************************

// GENERATED CODE - DO NOT MODIFY BY HAND

// **************************************************************************
// AutoRouteGenerator
// **************************************************************************
//
// ignore_for_file: type=lint

part of 'router.dart';

class _$$AppRouter extends RootStackRouter {
  _$$AppRouter([GlobalKey<NavigatorState>? navigatorKey]) : super(navigatorKey);

  @override
  final Map<String, PageFactory> pagesMap = {
    SignInPageRoute.name: (routeData) {
      return MaterialPageX<dynamic>(routeData: routeData, child: SignInPage());
    }
  };

  @override
  List<RouteConfig> get routes =>
      [RouteConfig(SignInPageRoute.name, path: '/')];
}

/// generated route for
/// [SignInPage]
class SignInPageRoute extends PageRouteInfo<void> {
  const SignInPageRoute() : super(SignInPageRoute.name, path: '/');

  static const String name = 'SignInPageRoute';
}

现在看来,“_$$AppRouter”的 class 声明的语法似乎不正常,因为我希望它生成一个简单的 'AppRouter' class。

我试过换[=​​31=]版本(目前是^2.1.8),换auto_route版本(^3.2.4)看能不能改什么,但是没用.

欢迎就此问题提供任何帮助。

这是文档的摘录:

Using part builder ( New in version 3.0.0+)

To generate a part-of file instead of a stand alone AppRouter class, simply add a Part Directive to your AppRouter and extend the generated private router.

part 'app_router.gr.dart'  
  
@MaterialAutoRouter(        
  replaceInRouteName: 'Page,Route',        
  routes: <AutoRoute>[        
    AutoRoute(page: BookListPage, initial: true),        
    AutoRoute(page: BookDetailsPage),        
  ],        
)        
// extend the generated private router  
class AppRouter extends _$AppRouter{}

意思是,这是您的代码中缺少的部分:class AppRouter extends _$AppRouter{}