Skip to content

Commit 0859e2f

Browse files
committed
refactor(settings): improve state management
- Persist settings during load/update - Avoid casting state for settings - Handle null userAppSettings properly
1 parent 9b8083c commit 0859e2f

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

lib/settings/bloc/settings_bloc.dart

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
1212
SettingsBloc({
1313
required HtDataRepository<UserAppSettings> userAppSettingsRepository,
1414
}) : _userAppSettingsRepository = userAppSettingsRepository,
15-
super(SettingsInitial()) {
15+
super(const SettingsInitial()) {
1616
on<SettingsLoaded>(_onSettingsLoaded);
1717
on<SettingsBaseThemeChanged>(_onSettingsBaseThemeChanged);
1818
on<SettingsAccentThemeChanged>(_onSettingsAccentThemeChanged);
@@ -28,9 +28,8 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
2828
SettingsLoaded event,
2929
Emitter<SettingsState> emit,
3030
) async {
31-
emit(SettingsLoadInProgress());
31+
emit(SettingsLoadInProgress(userAppSettings: state.userAppSettings));
3232
try {
33-
// Assuming a fixed ID for user settings, or fetching based on current user
3433
final userAppSettings = await _userAppSettingsRepository.read(
3534
id: event.userId!,
3635
);
@@ -40,9 +39,9 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
4039
await _userAppSettingsRepository.create(item: defaultSettings);
4140
emit(SettingsLoadSuccess(userAppSettings: defaultSettings));
4241
} on HtHttpException catch (e) {
43-
emit(SettingsLoadFailure(e.message));
42+
emit(SettingsLoadFailure(e.message, userAppSettings: state.userAppSettings));
4443
} catch (e) {
45-
emit(SettingsLoadFailure('An unexpected error occurred: $e'));
44+
emit(SettingsLoadFailure('An unexpected error occurred: $e', userAppSettings: state.userAppSettings));
4645
}
4746
}
4847

@@ -58,18 +57,18 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
5857
);
5958
emit(SettingsUpdateSuccess(userAppSettings: result));
6059
} on HtHttpException catch (e) {
61-
emit(SettingsUpdateFailure(e.message));
60+
emit(SettingsUpdateFailure(e.message, userAppSettings: state.userAppSettings));
6261
} catch (e) {
63-
emit(SettingsUpdateFailure('An unexpected error occurred: $e'));
62+
emit(SettingsUpdateFailure('An unexpected error occurred: $e', userAppSettings: state.userAppSettings));
6463
}
6564
}
6665

6766
Future<void> _onSettingsBaseThemeChanged(
6867
SettingsBaseThemeChanged event,
6968
Emitter<SettingsState> emit,
7069
) async {
71-
if (state is SettingsLoadSuccess) {
72-
final currentSettings = (state as SettingsLoadSuccess).userAppSettings;
70+
final currentSettings = state.userAppSettings;
71+
if (currentSettings != null) {
7372
final updatedSettings = currentSettings.copyWith(
7473
displaySettings: currentSettings.displaySettings.copyWith(
7574
baseTheme: event.baseTheme,
@@ -83,8 +82,8 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
8382
SettingsAccentThemeChanged event,
8483
Emitter<SettingsState> emit,
8584
) async {
86-
if (state is SettingsLoadSuccess) {
87-
final currentSettings = (state as SettingsLoadSuccess).userAppSettings;
85+
final currentSettings = state.userAppSettings;
86+
if (currentSettings != null) {
8887
final updatedSettings = currentSettings.copyWith(
8988
displaySettings: currentSettings.displaySettings.copyWith(
9089
accentTheme: event.accentTheme,
@@ -98,8 +97,8 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
9897
SettingsFontFamilyChanged event,
9998
Emitter<SettingsState> emit,
10099
) async {
101-
if (state is SettingsLoadSuccess) {
102-
final currentSettings = (state as SettingsLoadSuccess).userAppSettings;
100+
final currentSettings = state.userAppSettings;
101+
if (currentSettings != null) {
103102
final updatedSettings = currentSettings.copyWith(
104103
displaySettings: currentSettings.displaySettings.copyWith(
105104
fontFamily: event.fontFamily,
@@ -113,8 +112,8 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
113112
SettingsTextScaleFactorChanged event,
114113
Emitter<SettingsState> emit,
115114
) async {
116-
if (state is SettingsLoadSuccess) {
117-
final currentSettings = (state as SettingsLoadSuccess).userAppSettings;
115+
final currentSettings = state.userAppSettings;
116+
if (currentSettings != null) {
118117
final updatedSettings = currentSettings.copyWith(
119118
displaySettings: currentSettings.displaySettings.copyWith(
120119
textScaleFactor: event.textScaleFactor,
@@ -128,8 +127,8 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
128127
SettingsFontWeightChanged event,
129128
Emitter<SettingsState> emit,
130129
) async {
131-
if (state is SettingsLoadSuccess) {
132-
final currentSettings = (state as SettingsLoadSuccess).userAppSettings;
130+
final currentSettings = state.userAppSettings;
131+
if (currentSettings != null) {
133132
final updatedSettings = currentSettings.copyWith(
134133
displaySettings: currentSettings.displaySettings.copyWith(
135134
fontWeight: event.fontWeight,
@@ -143,8 +142,8 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
143142
SettingsLanguageChanged event,
144143
Emitter<SettingsState> emit,
145144
) async {
146-
if (state is SettingsLoadSuccess) {
147-
final currentSettings = (state as SettingsLoadSuccess).userAppSettings;
145+
final currentSettings = state.userAppSettings;
146+
if (currentSettings != null) {
148147
final updatedSettings = currentSettings.copyWith(
149148
language: event.language,
150149
);

0 commit comments

Comments
 (0)