@@ -16,8 +16,6 @@ import 'package:ui_kit/ui_kit.dart';
1616
1717// Keys for passing data to/from SourceFilterPage
1818const String keySelectedSources = 'selectedSources' ;
19- const String keySelectedCountryIsoCodes = 'selectedCountryIsoCodes' ;
20- const String keySelectedSourceTypes = 'selectedSourceTypes' ;
2119
2220/// {@template headlines_filter_page}
2321/// A full-screen dialog page for selecting headline filters.
@@ -42,10 +40,7 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
4240 /// and are only applied back to the BLoC when the user taps 'Apply'.
4341 late List <Topic > _tempSelectedTopics;
4442 late List <Source > _tempSelectedSources;
45- late Set <String > _tempSelectedSourceCountryIsoCodes;
46- late Set <SourceType > _tempSelectedSourceSourceTypes;
4743 late List <Country > _tempSelectedEventCountries;
48- late List <Country > _tempSelectedSourceCountries;
4944
5045 // New state variables for the "Apply my followed items" feature
5146 bool _useFollowedFilters = false ;
@@ -63,16 +58,7 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
6358 final currentFilter = headlinesFeedState.filter;
6459 _tempSelectedTopics = List .from (currentFilter.topics ?? []);
6560 _tempSelectedSources = List .from (currentFilter.sources ?? []);
66- _tempSelectedSourceCountryIsoCodes = Set .from (
67- currentFilter.selectedSourceCountryIsoCodes ?? {},
68- );
69- _tempSelectedSourceSourceTypes = Set .from (
70- currentFilter.selectedSourceSourceTypes ?? {},
71- );
7261 _tempSelectedEventCountries = List .from (currentFilter.eventCountries ?? []);
73- _tempSelectedSourceCountries = List .from (
74- currentFilter.sourceCountries ?? [],
75- );
7662
7763 _useFollowedFilters = currentFilter.isFromFollowedItems;
7864 _isLoadingFollowedFilters = false ;
@@ -129,7 +115,6 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
129115 _tempSelectedTopics = [];
130116 _tempSelectedSources = [];
131117 _tempSelectedEventCountries = [];
132- _tempSelectedSourceCountries = [];
133118 });
134119 if (mounted) {
135120 ScaffoldMessenger .of (context)
@@ -168,7 +153,6 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
168153 _tempSelectedTopics = [];
169154 _tempSelectedSources = [];
170155 _tempSelectedEventCountries = [];
171- _tempSelectedSourceCountries = [];
172156 _isLoadingFollowedFilters = false ;
173157 _useFollowedFilters = false ;
174158 });
@@ -208,10 +192,6 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
208192 _tempSelectedTopics = [];
209193 _tempSelectedSources = [];
210194 _tempSelectedEventCountries = [];
211- _tempSelectedSourceCountries = [];
212- // Keep source country/type filters as they are not part of this quick filter
213- // _tempSelectedSourceCountryIsoCodes = {};
214- // _tempSelectedSourceSourceTypes = {};
215195 });
216196 }
217197
@@ -226,14 +206,13 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
226206 /// (e.g., `SourceFilterPage` ) via the `extra` parameter of `context.pushNamed` .
227207 /// Updates the temporary state via the [onResult] callback when the
228208 /// criterion page pops with a result (the user tapped 'Apply' on that page).
229- Widget _buildFilterTile ({
209+ Widget _buildFilterTile < T > ({
230210 required BuildContext context,
231211 required String title,
232212 required int selectedCount,
233213 required String routeName,
234- // For sources, currentSelection will be a Map
235- required dynamic currentSelectionData,
236- required void Function (dynamic )? onResult,
214+ required List <T > currentSelectionData,
215+ required void Function (List <T >)? onResult,
237216 bool enabled = true ,
238217 }) {
239218 final l10n = AppLocalizationsX (context).l10n;
@@ -252,7 +231,7 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
252231 onTap:
253232 enabled // Only allow tap if enabled
254233 ? () async {
255- final result = await context.pushNamed <dynamic >(
234+ final result = await context.pushNamed <List < T > >(
256235 routeName,
257236 extra: currentSelectionData,
258237 );
@@ -308,20 +287,9 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
308287 sources: _tempSelectedSources.isNotEmpty
309288 ? _tempSelectedSources
310289 : null ,
311- selectedSourceCountryIsoCodes:
312- _tempSelectedSourceCountryIsoCodes.isNotEmpty
313- ? _tempSelectedSourceCountryIsoCodes
314- : null ,
315- selectedSourceSourceTypes:
316- _tempSelectedSourceSourceTypes.isNotEmpty
317- ? _tempSelectedSourceSourceTypes
318- : null ,
319290 eventCountries: _tempSelectedEventCountries.isNotEmpty
320291 ? _tempSelectedEventCountries
321292 : null ,
322- sourceCountries: _tempSelectedSourceCountries.isNotEmpty
323- ? _tempSelectedSourceCountries
324- : null ,
325293 isFromFollowedItems: _useFollowedFilters,
326294 );
327295 context.read <HeadlinesFeedBloc >().add (
@@ -379,54 +347,37 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
379347 ),
380348 ),
381349 const Divider (),
382- _buildFilterTile (
350+ _buildFilterTile < Topic > (
383351 context: context,
384352 title: l10n.headlinesFeedFilterTopicLabel,
385353 enabled: ! _useFollowedFilters && ! _isLoadingFollowedFilters,
386354 selectedCount: _tempSelectedTopics.length,
387355 routeName: Routes .feedFilterTopicsName,
388356 currentSelectionData: _tempSelectedTopics,
389357 onResult: (result) {
390- if (result is List <Topic >) {
391- setState (() => _tempSelectedTopics = result);
392- }
358+ setState (() => _tempSelectedTopics = result);
393359 },
394360 ),
395- _buildFilterTile (
361+ _buildFilterTile < Source > (
396362 context: context,
397363 title: l10n.headlinesFeedFilterSourceLabel,
398364 enabled: ! _useFollowedFilters && ! _isLoadingFollowedFilters,
399365 selectedCount: _tempSelectedSources.length,
400366 routeName: Routes .feedFilterSourcesName,
401- currentSelectionData: {
402- keySelectedSources: _tempSelectedSources,
403- keySelectedCountryIsoCodes: _tempSelectedSourceCountryIsoCodes,
404- keySelectedSourceTypes: _tempSelectedSourceSourceTypes,
405- },
367+ currentSelectionData: _tempSelectedSources,
406368 onResult: (result) {
407- if (result is Map <String , dynamic >) {
408- setState (() {
409- _tempSelectedSources =
410- result[keySelectedSources] as List <Source >? ?? [];
411- _tempSelectedSourceCountryIsoCodes =
412- result[keySelectedCountryIsoCodes] as Set <String >? ?? {};
413- _tempSelectedSourceSourceTypes =
414- result[keySelectedSourceTypes] as Set <SourceType >? ?? {};
415- });
416- }
369+ setState (() => _tempSelectedSources = result);
417370 },
418371 ),
419- _buildFilterTile (
372+ _buildFilterTile < Country > (
420373 context: context,
421374 title: l10n.headlinesFeedFilterEventCountryLabel,
422375 enabled: ! _useFollowedFilters && ! _isLoadingFollowedFilters,
423376 selectedCount: _tempSelectedEventCountries.length,
424377 routeName: Routes .feedFilterEventCountriesName,
425378 currentSelectionData: _tempSelectedEventCountries,
426379 onResult: (result) {
427- if (result is List <Country >) {
428- setState (() => _tempSelectedEventCountries = result);
429- }
380+ setState (() => _tempSelectedEventCountries = result);
430381 },
431382 ),
432383 ],
0 commit comments