首页 > 解决方案 > Flutter Provider:MaterialApp.router 依赖于 provider

问题描述

我正在尝试使用提供者的状态使我的 MaterialApp.router 具有反应性。

但我遇到了一些问题,主要是调试模式下的热重载不起作用。

我在网上查了一下,你不应该把变量放在 MaterialApp.router 构建方法中,但是你如何让它对状态有反应而不把它放在构建方法中呢?

我的根提供商:

Widget build(BuildContext context) {
   return MultiProvider(
     providers: [
       StreamProvider<User?>.value(
         value: AuthService().user,
         initialData: AuthService().currentUser,
       ),
     ],
     child: App(),
   );
 }
 

我的应用程序:

Widget build(BuildContext context) {
   final user = Provider.of<User?>(context); 

   return MaterialApp.router(
     routerDelegate: AutoRouterDelegate.declarative(
       _appRouter,
       routes: (_) => [
         if (user != null) const HomeRoute() else const LoginRoute(),
       ],
     ),
     routeInformationParser: _appRouter.defaultRouteParser(
       includePrefixMatches: true,
     ),
     // darkTheme: DefaultTheme.dark(),
   );
 }

编辑:不工作,我的意思是模拟器只是白屏,需要重新启动应用程序

标签: flutterflutter-provider

解决方案


不要使用最终用户 = Provider.of(context),而是使用 Consumer。您需要使用更好的 navigator 2.0 实现,我建议您遵循本指南https://medium.com/geekculture/a-simpler-guide-to-flutter-navigator-2-0-part-i-70623cedc93b或切换 Navigator 1,它更易于与 MaterialApp 一起使用(路由:[路由列表],初始路由:等)。


推荐阅读