0

我正在关注 ResoCoder 的优秀 DDD Flutter 课程,但我正在尝试使用最新的 pubspecs 将代码更新为空安全。https://youtu.be/7qMADWW4gts

我遇到了最新版本的 AutoRoute 的问题,自 1.0 版以来,它不再具有 ExtendedNavigator 类。

在 app_widget.dart 的课程中​​,Matt 有以下代码:

class AppWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider(
          create: (context) =>
              getIt<AuthBloc>()..add(const AuthEvent.authCheckRequested()),
        )
      ],
      child: MaterialApp(
        title: 'Notes',
        debugShowCheckedModeBanner: false,
        builder: ExtendedNavigator.builder(router: app_router.Router()),
        theme: ThemeData.light().copyWith(
          primaryColor: Colors.green[800],
          accentColor: Colors.blueAccent,
          floatingActionButtonTheme: FloatingActionButtonThemeData(
            backgroundColor: Colors.blue[900],
          ),
          inputDecorationTheme: InputDecorationTheme(
            border: OutlineInputBorder(
              borderRadius: BorderRadius.circular(8),
            ),
          ),
        ),
      ),
    );
  }
}

我遇到的问题是,自 null 安全版本 1.0 以来,AutoRoute 中不再存在 ExtendedNavigator 类。我希望能够使用 Bloc 模式进行状态管理,但无法弄清楚如何将其连接到 AutoRoute,如 DDD 课程中所述。

builder: ExtendedNavigator.builder(router: app_router.Router()),

auto_route 包页面上的示例代码告诉我按如下方式连接路由器:

final _appRouter = AppRouter()  
   ...  
  Widget build(BuildContext context){  
      return MaterialApp.router(  
             routerDelegate: _appRouter.delegate(...initialConfig),  
             routeInformationParser: _appRouter.defaultRouteParser(),  
         ),  
  }  

由于 MaterialApp 是 MultiBlocProvider 的子级,我不知道如何访问 MaterialApp.router,如 auto_route 示例中所述。

4

1 回答 1

1

注册第三方类型是我的解决方案。

https://pub.dev/packages/injectable#Registering-third-party-types

import 'package:injectable/injectable.dart';

@module
abstract class RegisterModule {
  @singleton
  AppRouter get router  =>  AppRouter();
}

然后你可以像这样使用 getIt 访问 AppRouter

getIt<AppRouter>()
于 2021-12-30T13:25:03.193 回答