Skip to content

Commit

Permalink
If the lang changes, reload the required blocs
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Jan 3, 2021
1 parent 416c925 commit 161809a
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 20 deletions.
29 changes: 26 additions & 3 deletions lib/bloc/main/main_bloc.dart
Expand Up @@ -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';
Expand All @@ -24,7 +25,20 @@ class MainBloc extends Bloc<MainEvent, MainState> {
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;

Expand All @@ -43,14 +57,14 @@ class MainBloc extends Bloc<MainEvent, MainState> {
return _loadThemeData(currentState.appTitle, _settingsService.appTheme, accentColor, _settingsService.language);
},
languageChanged: (language) async {
return _init();
return _init(languageChanged: true);
},
);

yield s;
}

Future<MainState> _init() async {
Future<MainState> _init({bool languageChanged = false}) async {
_logger.info(runtimeType, '_init: Initializing all..');
await _settingsService.init();

Expand All @@ -61,6 +75,15 @@ class MainBloc extends Bloc<MainEvent, MainState> {
_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));
Expand Down
7 changes: 6 additions & 1 deletion lib/bloc/settings/settings_bloc.dart
Expand Up @@ -9,15 +9,17 @@ 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';
part 'settings_state.dart';

class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
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;

Expand All @@ -41,14 +43,17 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
},
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 {
Expand Down
34 changes: 21 additions & 13 deletions lib/main.dart
Expand Up @@ -26,14 +26,6 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider(
create: (ctx) {
final loggingService = getIt<LoggingService>();
final genshinService = getIt<GenshinService>();
final settingsService = getIt<SettingsService>();
return MainBloc(loggingService, genshinService, settingsService)..add(const MainEvent.init());
},
),
BlocProvider(create: (ctx) => MainTabBloc()),
BlocProvider(
create: (ctx) {
Expand Down Expand Up @@ -87,20 +79,36 @@ class MyApp extends StatelessWidget {
),
BlocProvider(
create: (ctx) {
final settingsService = getIt<SettingsService>();
return SettingsBloc(settingsService);
final networkService = getIt<NetworkService>();
return UrlPageBloc(networkService);
},
),
BlocProvider(
create: (ctx) {
final networkService = getIt<NetworkService>();
return UrlPageBloc(networkService);
final genshinService = getIt<GenshinService>();
return ArtifactDetailsBloc(genshinService);
},
),
BlocProvider(
create: (ctx) {
final loggingService = getIt<LoggingService>();
final genshinService = getIt<GenshinService>();
return ArtifactDetailsBloc(genshinService);
final settingsService = getIt<SettingsService>();
return MainBloc(
loggingService,
genshinService,
settingsService,
ctx.read<CharactersBloc>(),
ctx.read<WeaponsBloc>(),
ctx.read<HomeBloc>(),
ctx.read<ArtifactsBloc>(),
)..add(const MainEvent.init());
},
),
BlocProvider(
create: (ctx) {
final settingsService = getIt<SettingsService>();
return SettingsBloc(settingsService, ctx.read<MainBloc>());
},
),
],
Expand Down
1 change: 0 additions & 1 deletion lib/ui/widgets/settings/accent_color_settings_card.dart
Expand Up @@ -70,6 +70,5 @@ class AccentColorSettingsCard extends StatelessWidget {

void _accentColorChanged(AppAccentColorType newValue, BuildContext context) {
context.read<SettingsBloc>().add(SettingsEvent.accentColorChanged(newValue: newValue));
context.read<MainBloc>().add(MainEvent.accentColorChanged(newValue: newValue));
}
}
1 change: 0 additions & 1 deletion lib/ui/widgets/settings/language_settings_card.dart
Expand Up @@ -72,6 +72,5 @@ class LanguageSettingsCard extends StatelessWidget {

void _languageChanged(AppLanguageType newValue, BuildContext context) {
context.read<SettingsBloc>().add(SettingsEvent.languageChanged(newValue: newValue));
context.read<MainBloc>().add(MainEvent.languageChanged(newValue: newValue));
}
}
1 change: 0 additions & 1 deletion lib/ui/widgets/settings/theme_settings_card.dart
Expand Up @@ -72,6 +72,5 @@ class ThemeSettingsCard extends StatelessWidget {

void _appThemeChanged(AppThemeType newValue, BuildContext context) {
context.read<SettingsBloc>().add(SettingsEvent.themeChanged(newValue: newValue));
context.read<MainBloc>().add(MainEvent.themeChanged(newValue: newValue));
}
}

0 comments on commit 161809a

Please sign in to comment.