【问题标题】:ChangeNotifierProxyProvider getting null valueChangeNotifierProxyProvider 获取空值
【发布时间】:2021-01-10 21:52:17
【问题描述】:

我是 Flutter 的新手。

在我的应用程序区域设置信息是在用户登录时找到的。 所以想法是当用户登录时,它将语言环境传递给 AppLanguage。

我已经编写了 ChangeNotifierProxyProvider 来获取身份验证信息中的语言环境并创建一个 AppLanuage 对象

在 ChangeNotifierProxyProvider 中,我将 appLang 设为 null。 auth 对象正确地不为空。

什么我不明白为什么我会得到空值?

我确实在这里创建的,对吗?

create: (_) => AppLanguage(),

不应该作为更新的参数来吗?

Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(value: Auth()),
        ChangeNotifierProxyProvider<Auth, AppLanguage>(
            create: (_) => AppLanguage(),
            update: (ctx, auth, appLang) {
              print(auth);
              print(appLang);
            }
            //appLang.setLocale(auth == null ? 'en' : auth.language),
            ),
      ],
      child: Consumer2<Auth, AppLanguage>(
        builder: (ctx, auth, lang, child) => MaterialApp(
          title: 'Test App',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          locale: lang.appLocal,
          supportedLocales: [
            const Locale('en', 'US'),
            const Locale('ja', ''),
          ],
          localizationsDelegates: [
            AppLocalizations.delegate,
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
          ],
          home: LandingView(),
        ),
      ),
    );
  }

【问题讨论】:

    标签: flutter null flutter-change-notifier


    【解决方案1】:

    我会尝试类似:

    ChangeNotifierProxyProvider<Auth, AppLanguage>(
      create: (_) => AppLanguage(),
      update: (ctx, auth, appLang) => appLang..update(auth),
    ),
    
    class AppLanguage with ChangeNotifier {
      void update(Auth auth) {
        // Do some custom work based on myModel that may call `notifyListeners`
      }
    }
    

    这样您的孩子将能够在可用时获得正确的更新值。

    您可以在provider docs 上查看更多如何正确处理。

    【讨论】:

    • “appLang..update(auth)”中的双点有什么作用?
    • 根据新的auth 值返回具有新值的appLang 模型
    猜你喜欢
    • 2021-03-18
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多