Skip to content

Commit f7cbaaf

Browse files
committed
feat(settings): add headline image style setting
- Implement SettingsHeadlineImageStyleChanged event and handler - Update UserAppSettings to include headline image style preference - Add logic to clear ad cache when headline image style changes - Ensure new ads are loaded with the correct template type
1 parent add36f2 commit f7cbaaf

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

lib/settings/bloc/settings_bloc.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:bloc_concurrency/bloc_concurrency.dart';
55
import 'package:core/core.dart';
66
import 'package:data_repository/data_repository.dart';
77
import 'package:equatable/equatable.dart';
8+
import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_cache_service.dart';
89

910
part 'settings_event.dart';
1011
part 'settings_state.dart';
@@ -35,6 +36,10 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
3536
_onAppFontSizeChanged,
3637
transformer: sequential(),
3738
);
39+
on<SettingsHeadlineImageStyleChanged>(
40+
_onHeadlineImageStyleChanged,
41+
transformer: sequential(),
42+
);
3843
on<SettingsAppFontTypeChanged>(
3944
_onAppFontTypeChanged,
4045
transformer: sequential(),
@@ -164,6 +169,8 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
164169
);
165170
emit(state.copyWith(userAppSettings: updatedSettings, clearError: true));
166171
await _persistSettings(updatedSettings, emit);
172+
// Clear ad cache when theme accent changes to ensure new ads are styled correctly.
173+
AdCacheService().clearAllAds();
167174
}
168175

169176
Future<void> _onAppFontSizeChanged(
@@ -181,6 +188,24 @@ class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
181188
await _persistSettings(updatedSettings, emit);
182189
}
183190

191+
Future<void> _onHeadlineImageStyleChanged(
192+
SettingsHeadlineImageStyleChanged event,
193+
Emitter<SettingsState> emit,
194+
) async {
195+
if (state.userAppSettings == null) return;
196+
197+
final updatedSettings = state.userAppSettings!.copyWith(
198+
feedPreferences: state.userAppSettings!.feedPreferences.copyWith(
199+
headlineImageStyle: event.imageStyle,
200+
),
201+
);
202+
emit(state.copyWith(userAppSettings: updatedSettings, clearError: true));
203+
await _persistSettings(updatedSettings, emit);
204+
// Clear ad cache when headline image style changes to ensure new ads are
205+
// loaded with the correct template type (small/medium).
206+
AdCacheService().clearAllAds();
207+
}
208+
184209
Future<void> _onAppFontTypeChanged(
185210
SettingsAppFontTypeChanged event,
186211
Emitter<SettingsState> emit,

0 commit comments

Comments
 (0)