更改语言环境后,MaterialApp 不会重建

问题描述 投票:0回答:1
更改

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
。这些都不起作用。

flutter localization intl
1个回答
0
投票

尝试根据您当前的语言将

key
添加到您的
MaterialApp
小部件以强制重建:

MaterialApp.router( 
  key: ValueKey(languageState.currentLanguage.code),
  routerConfig: _appRouter.config(),
  locale: Locale.fromSubtags(languageCode: languageState.currentLanguage.code),
  ...
)
© www.soinside.com 2019 - 2024. All rights reserved.