为什么 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{}
。
当尝试在 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{}
。