ChangeNotifierProxyProvider 获取空值
ChangeNotifierProxyProvider getting null value
我是 Flutter 新手
在我的应用程序中,区域设置信息是在用户登录时找到的。
所以这个想法是当用户登录时,它将语言环境传递给 AppLanguage。
我已经编写了 ChangeNotifierProxyProvider 来获取认证信息中的语言环境并创建 AppLanuage 对象
在 ChangeNotifierProxyProvider 中,我将 appLang 设为空。 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(),
),
),
);
}
我会尝试类似的方法:
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`
}
}
这样您的 child 将能够在可用时获得正确的更新值。
您可以在 provider docs.
上查看更多如何正确处理的信息
我是 Flutter 新手
在我的应用程序中,区域设置信息是在用户登录时找到的。 所以这个想法是当用户登录时,它将语言环境传递给 AppLanguage。
我已经编写了 ChangeNotifierProxyProvider 来获取认证信息中的语言环境并创建 AppLanuage 对象
在 ChangeNotifierProxyProvider 中,我将 appLang 设为空。 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(),
),
),
);
}
我会尝试类似的方法:
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`
}
}
这样您的 child 将能够在可用时获得正确的更新值。
您可以在 provider docs.
上查看更多如何正确处理的信息