From 161809a55305b92b735c12926aeef434d281ab4a Mon Sep 17 00:00:00 2001 From: Efrain Date: Sun, 3 Jan 2021 18:38:16 -0500 Subject: [PATCH] If the lang changes, reload the required blocs --- lib/bloc/main/main_bloc.dart | 29 ++++++++++++++-- lib/bloc/settings/settings_bloc.dart | 7 +++- lib/main.dart | 34 ++++++++++++------- .../settings/accent_color_settings_card.dart | 1 - .../settings/language_settings_card.dart | 1 - .../widgets/settings/theme_settings_card.dart | 1 - 6 files changed, 53 insertions(+), 20 deletions(-) diff --git a/lib/bloc/main/main_bloc.dart b/lib/bloc/main/main_bloc.dart index 547b18785..de82f757c 100644 --- a/lib/bloc/main/main_bloc.dart +++ b/lib/bloc/main/main_bloc.dart @@ -14,6 +14,7 @@ import '../../generated/l10n.dart'; import '../../services/genshing_service.dart'; import '../../services/logging_service.dart'; import '../../services/settings_service.dart'; +import '../bloc.dart'; part 'main_bloc.freezed.dart'; part 'main_event.dart'; @@ -24,7 +25,20 @@ class MainBloc extends Bloc { final GenshinService _genshinService; final SettingsService _settingsService; - MainBloc(this._logger, this._genshinService, this._settingsService) : super(const MainState.loading()); + final CharactersBloc _charactersBloc; + final WeaponsBloc _weaponsBloc; + final HomeBloc _homeBloc; + final ArtifactsBloc _artifactsBloc; + + MainBloc( + this._logger, + this._genshinService, + this._settingsService, + this._charactersBloc, + this._weaponsBloc, + this._homeBloc, + this._artifactsBloc, + ) : super(const MainState.loading()); _MainLoadedState get currentState => state as _MainLoadedState; @@ -43,14 +57,14 @@ class MainBloc extends Bloc { return _loadThemeData(currentState.appTitle, _settingsService.appTheme, accentColor, _settingsService.language); }, languageChanged: (language) async { - return _init(); + return _init(languageChanged: true); }, ); yield s; } - Future _init() async { + Future _init({bool languageChanged = false}) async { _logger.info(runtimeType, '_init: Initializing all..'); await _settingsService.init(); @@ -61,6 +75,15 @@ class MainBloc extends Bloc { _logger.error(runtimeType, '_init: Unknown error while trying to delete old logs', e, s); } await _genshinService.init(_settingsService.language); + + if (languageChanged) { + _logger.info(runtimeType, '_init: Language changed, reloading all the required blocs...'); + _charactersBloc.add(const CharactersEvent.init()); + _weaponsBloc.add(const WeaponsEvent.init()); + _homeBloc.add(const HomeEvent.init()); + _artifactsBloc.add(const ArtifactsEvent.init()); + } + final packageInfo = await PackageInfo.fromPlatform(); final settings = _settingsService.appSettings; await Future.delayed(const Duration(milliseconds: 600)); diff --git a/lib/bloc/settings/settings_bloc.dart b/lib/bloc/settings/settings_bloc.dart index 49c6d4f70..2e3cb398e 100644 --- a/lib/bloc/settings/settings_bloc.dart +++ b/lib/bloc/settings/settings_bloc.dart @@ -9,6 +9,7 @@ import '../../common/enums/app_accent_color_type.dart'; import '../../common/enums/app_language_type.dart'; import '../../common/enums/app_theme_type.dart'; import '../../services/settings_service.dart'; +import '../bloc.dart'; part 'settings_bloc.freezed.dart'; part 'settings_event.dart'; @@ -16,8 +17,9 @@ part 'settings_state.dart'; class SettingsBloc extends Bloc { final SettingsService _settingsService; + final MainBloc _mainBloc; - SettingsBloc(this._settingsService) : super(const SettingsState.loading()); + SettingsBloc(this._settingsService, this._mainBloc) : super(const SettingsState.loading()); _LoadedState get currentState => state as _LoadedState; @@ -41,14 +43,17 @@ class SettingsBloc extends Bloc { }, themeChanged: (event) async { _settingsService.appTheme = event.newValue; + _mainBloc.add(MainEvent.themeChanged(newValue: event.newValue)); return currentState.copyWith.call(currentTheme: event.newValue); }, accentColorChanged: (event) async { _settingsService.accentColor = event.newValue; + _mainBloc.add(MainEvent.accentColorChanged(newValue: event.newValue)); return currentState.copyWith.call(currentAccentColor: event.newValue); }, languageChanged: (event) async { _settingsService.language = event.newValue; + _mainBloc.add(MainEvent.languageChanged(newValue: event.newValue)); return currentState.copyWith.call(currentLanguage: event.newValue); }, showCharacterDetailsChanged: (event) async { diff --git a/lib/main.dart b/lib/main.dart index b2b88528c..77846de04 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,14 +26,6 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MultiBlocProvider( providers: [ - BlocProvider( - create: (ctx) { - final loggingService = getIt(); - final genshinService = getIt(); - final settingsService = getIt(); - return MainBloc(loggingService, genshinService, settingsService)..add(const MainEvent.init()); - }, - ), BlocProvider(create: (ctx) => MainTabBloc()), BlocProvider( create: (ctx) { @@ -87,20 +79,36 @@ class MyApp extends StatelessWidget { ), BlocProvider( create: (ctx) { - final settingsService = getIt(); - return SettingsBloc(settingsService); + final networkService = getIt(); + return UrlPageBloc(networkService); }, ), BlocProvider( create: (ctx) { - final networkService = getIt(); - return UrlPageBloc(networkService); + final genshinService = getIt(); + return ArtifactDetailsBloc(genshinService); }, ), BlocProvider( create: (ctx) { + final loggingService = getIt(); final genshinService = getIt(); - return ArtifactDetailsBloc(genshinService); + final settingsService = getIt(); + return MainBloc( + loggingService, + genshinService, + settingsService, + ctx.read(), + ctx.read(), + ctx.read(), + ctx.read(), + )..add(const MainEvent.init()); + }, + ), + BlocProvider( + create: (ctx) { + final settingsService = getIt(); + return SettingsBloc(settingsService, ctx.read()); }, ), ], diff --git a/lib/ui/widgets/settings/accent_color_settings_card.dart b/lib/ui/widgets/settings/accent_color_settings_card.dart index f5604f7b1..a2f8f69c2 100644 --- a/lib/ui/widgets/settings/accent_color_settings_card.dart +++ b/lib/ui/widgets/settings/accent_color_settings_card.dart @@ -70,6 +70,5 @@ class AccentColorSettingsCard extends StatelessWidget { void _accentColorChanged(AppAccentColorType newValue, BuildContext context) { context.read().add(SettingsEvent.accentColorChanged(newValue: newValue)); - context.read().add(MainEvent.accentColorChanged(newValue: newValue)); } } diff --git a/lib/ui/widgets/settings/language_settings_card.dart b/lib/ui/widgets/settings/language_settings_card.dart index 11cf56b3b..3d67c3593 100644 --- a/lib/ui/widgets/settings/language_settings_card.dart +++ b/lib/ui/widgets/settings/language_settings_card.dart @@ -72,6 +72,5 @@ class LanguageSettingsCard extends StatelessWidget { void _languageChanged(AppLanguageType newValue, BuildContext context) { context.read().add(SettingsEvent.languageChanged(newValue: newValue)); - context.read().add(MainEvent.languageChanged(newValue: newValue)); } } diff --git a/lib/ui/widgets/settings/theme_settings_card.dart b/lib/ui/widgets/settings/theme_settings_card.dart index e83a8b0cd..aff26e15a 100644 --- a/lib/ui/widgets/settings/theme_settings_card.dart +++ b/lib/ui/widgets/settings/theme_settings_card.dart @@ -72,6 +72,5 @@ class ThemeSettingsCard extends StatelessWidget { void _appThemeChanged(AppThemeType newValue, BuildContext context) { context.read().add(SettingsEvent.themeChanged(newValue: newValue)); - context.read().add(MainEvent.themeChanged(newValue: newValue)); } }