MaterialApp isn't rebuilding after I change locale. It changes texts only after I use hot reload. I put print to see if the state of LanguageBloc rebuilds and it does.
I am using:
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(),
);
},
),
);
},
);
}
}
I tried returning whole Locale object from state, different Locale constructors and using setState. None of those worked.
Try adding a
keyto yourMaterialAppwidget based on your current language in order to force the rebuild: