Flutter ChangeNotifierProxy提供程序获取空值

Flutter ChangeNotifierProxy提供程序获取空值,flutter,null,flutter-change-notifier,Flutter,Null,Flutter Change Notifier,我是个新手 在我的应用程序中,当用户登录时可以找到区域设置信息。 因此,当用户登录时,它会将区域设置传递给AppLanguage 我已经编写了ChangeNotifierProxyProvider来获取认证信息中的区域设置并创建一个AppLanuage对象 在ChangeNotifierProxyProvider中,我将appLang设置为null。验证对象正确地不为空 我不明白为什么我会变空 是我在这里创造的,对吗 create: (_) => AppLanguage(), 它不应该作

我是个新手

在我的应用程序中,当用户登录时可以找到区域设置信息。 因此,当用户登录时,它会将区域设置传递给AppLanguage

我已经编写了ChangeNotifierProxyProvider来获取认证信息中的区域设置并创建一个AppLanuage对象

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

我不明白为什么我会变空

是我在这里创造的,对吗

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(),
        ),
      ),
    );
  }
小部件构建(构建上下文){
回程多供应商(
供应商:[
ChangeNotifierProvider.value(值:Auth()),
ChangeNotifierProxyProvider(
创建:()=>ApplLanguage(),
更新:(ctx、认证、应用程序){
打印(auth);
印刷(阿普朗);
}
//appLang.setLocale(auth==null?'en':auth.language),
),
],
儿童:消费者2(
生成器:(ctx、auth、lang、child)=>MaterialApp(
标题:“测试应用程序”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
地点:lang.appLocal,
支持的区域设置:[
常量区域设置('en','US'),
常量区域设置('ja',''),
],
本地化授权:[
AppLocalizations.delegate,
GlobalMaterialAllocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
主页:LandingView(),
),
),
);
}

我会尝试以下方法:

ChangeNotifierProxyProvider<Auth, AppLanguage>(
  create: (_) => AppLanguage(),
  update: (ctx, auth, appLang) => appLang..update(auth),
),
这样,您的孩子将能够在可用时获得正确的更新值


您可以在上查看更多如何正确处理此问题。

我会尝试以下方法:

ChangeNotifierProxyProvider<Auth, AppLanguage>(
  create: (_) => AppLanguage(),
  update: (ctx, auth, appLang) => appLang..update(auth),
),
这样,您的孩子将能够在可用时获得正确的更新值


您可以在上查看如何正确处理此问题。

在“appLang..update(auth)”中双点的作用是什么?根据新的
auth
值返回带有新值的
appLang
模型“appLang..update(auth)”中双点的作用是什么do?根据新的
auth
值,返回带有新值的
appLang
模型