MaterialApp
后,
locale
未重建。仅在我使用热重载后它才会更改文本。我放置 print
来查看 LanguageBloc
的状态是否会重建,并且确实如此。
我正在使用:
intl: 0.18.1
Flutter 3.16.9
class _MyAppState extends State<MyApp> {
@override
Widget build(final BuildContext context) {
final AppRouter _appRouter = dependencies.get();
final ThemeBloc _themeBloc = dependencies.get();
final LanguageBloc _languageBloc = dependencies.get();
return BlocBuilder(
bloc: _themeBloc,
builder: (BuildContext context, ThemeState themeState) {
return AppThemeWidget(
theme: themeState.theme,
child: BlocBuilder(
bloc: _languageBloc,
builder: (BuildContext context, LanguageState languageState) {
print(languageState.currentLanguage.code);
return MaterialApp.router(
routerConfig: _appRouter.config(),
locale: Locale.fromSubtags(languageCode: languageState.currentLanguage.code),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
builder: BotToastInit(),
);
},
),
);
},
);
}
}
我尝试从状态返回整个
Locale
对象,不同的Locale
构造函数并使用setState
。这些都不起作用。
尝试根据您当前的语言将
key
添加到您的 MaterialApp
小部件以强制重建:
MaterialApp.router(
key: ValueKey(languageState.currentLanguage.code),
routerConfig: _appRouter.config(),
locale: Locale.fromSubtags(languageCode: languageState.currentLanguage.code),
...
)