I have this issue where the whole MaterialApp() seems like rebuild whenever i try to do sessionStateStream.add().
After troubleshooting a while i found out that after i remove the AppLocalizations delegate from my MaterialApp(), it is working as usual without keep rebuilding everytime i do sessionStateStream.add().
Do you have any idea what is going on?
Thanks in advance.
class MyApp extends StatefulWidget {
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final AuthBloc _signInBloc = AuthBloc();
@override
Widget build(BuildContext context) {
final sessionConfig = SessionConfig(
invalidateSessionForAppLostFocus: const Duration(seconds: 240),
invalidateSessionForUserInactivity: const Duration(seconds: 240),
);
sessionConfig.stream.listen((SessionTimeoutState timeoutEvent) {
// stop listening, as user will already be in auth page
_signInBloc.state.sessionStateStream.add(SessionState.stopListening);
if (timeoutEvent == SessionTimeoutState.userInactivityTimeout) {
// handle user inactive timeout
_signInBloc.add(Logout());
navigatorKey.currentState?.popUntil((route) => route.isFirst);
} else if (timeoutEvent == SessionTimeoutState.appFocusTimeout) {
_signInBloc.add(Logout());
navigatorKey.currentState?.popUntil((route) => route.isFirst);
}
});
return SessionTimeoutManager(
sessionConfig: sessionConfig,
sessionStateStream: _signInBloc.state.sessionStateStream.stream,
child: MaterialApp(
debugShowCheckedModeBanner: false,
theme: !appStore.isDarkModeOn
? AppThemeData.lightTheme
: AppThemeData.darkTheme,
onGenerateRoute: (settings) {
return generateRoute(settings, _signInBloc, sessionConfig);
},
navigatorKey: navigatorKey,
scrollBehavior: SBehavior(),
supportedLocales: LanguageDataModel.languageLocales(),
localizationsDelegates: [
THIS LINE HERE
// AppLocalizations(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
localeResolutionCallback: (locale, supportedLocales) => locale,
locale: Locale(appStore.selectedLanguageCode),
),
);
}
@override
void dispose() {
_signInBloc.close();
super.dispose();
}
}
class AppLocalizations extends LocalizationsDelegate<BaseLanguage> {
const AppLocalizations();
@override
Future<BaseLanguage> load(Locale locale) async {
switch (locale.languageCode) {
case 'en':
return LanguageEn();
case 'ar':
return LanguageAr();
case 'hi':
return LanguageHi();
case 'fr':
return LanguageFr();
default:
return LanguageEn();
}
}
@override
bool isSupported(Locale locale) => LanguageDataModel.languages().contains(locale.languageCode);
@override
bool shouldReload(LocalizationsDelegate<BaseLanguage> old) => false;
}