@@ -22,9 +22,7 @@ import 'package:ht_sources_client/ht_sources_client.dart';
22
22
/// {@endtemplate}
23
23
class HeadlinesFilterPage extends StatefulWidget {
24
24
/// {@macro headlines_filter_page}
25
- const HeadlinesFilterPage ({required this .headlinesFeedBloc, super .key});
26
-
27
- final HeadlinesFeedBloc headlinesFeedBloc;
25
+ const HeadlinesFilterPage ({super .key});
28
26
29
27
@override
30
28
State <HeadlinesFilterPage > createState () => _HeadlinesFilterPageState ();
@@ -40,7 +38,7 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
40
38
void initState () {
41
39
super .initState ();
42
40
// Initialize temporary state from the currently active filters in the BLoC
43
- final currentState = widget.headlinesFeedBloc .state;
41
+ final currentState = BlocProvider . of < HeadlinesFeedBloc >(context) .state;
44
42
if (currentState is HeadlinesFeedLoaded ) {
45
43
_tempSelectedCategories = List .from (currentState.filter.categories ?? []);
46
44
_tempSelectedSources = List .from (currentState.filter.sources ?? []);
@@ -98,103 +96,101 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
98
96
);
99
97
}
100
98
99
+ @override
101
100
@override
102
101
Widget build (BuildContext context) {
103
102
final l10n = context.l10n;
104
103
105
- return BlocProvider .value (
106
- value: widget.headlinesFeedBloc,
107
- child: Scaffold (
108
- appBar: AppBar (
109
- leading: IconButton (
110
- icon: const Icon (Icons .close),
111
- tooltip: MaterialLocalizations .of (context).closeButtonTooltip,
112
- onPressed: () => context.pop (), // Discard changes
104
+ return Scaffold (
105
+ appBar: AppBar (
106
+ leading: IconButton (
107
+ icon: const Icon (Icons .close),
108
+ tooltip: MaterialLocalizations .of (context).closeButtonTooltip,
109
+ onPressed: () => context.pop (), // Discard changes
110
+ ),
111
+ title: Text (l10n.headlinesFeedFilterTitle),
112
+ actions: [
113
+ // Clear Button
114
+ IconButton (
115
+ icon: const Icon (Icons .clear_all),
116
+ tooltip: l10n.headlinesFeedFilterResetButton,
117
+ onPressed: () {
118
+ // Dispatch clear event immediately and pop
119
+ context.read <HeadlinesFeedBloc >().add (
120
+ HeadlinesFeedFiltersCleared (),
121
+ );
122
+ context.pop ();
123
+ },
113
124
),
114
- title: Text (l10n.headlinesFeedFilterTitle),
115
- actions: [
116
- // Clear Button
117
- IconButton (
118
- icon: const Icon (Icons .clear_all),
119
- tooltip: l10n.headlinesFeedFilterResetButton,
120
- onPressed: () {
121
- // Dispatch clear event immediately and pop
122
- context.read <HeadlinesFeedBloc >().add (
123
- HeadlinesFeedFiltersCleared (),
124
- );
125
- context.pop ();
126
- },
127
- ),
128
- // Apply Button
129
- IconButton (
130
- icon: const Icon (Icons .check),
131
- tooltip: l10n.headlinesFeedFilterApplyButton,
132
- onPressed: () {
133
- // Apply the temporary filters to the BLoC
134
- context.read <HeadlinesFeedBloc >().add (
135
- HeadlinesFeedFiltersApplied (
136
- filter: HeadlineFilter (
137
- categories:
138
- _tempSelectedCategories.isNotEmpty
139
- ? _tempSelectedCategories
140
- : null ,
141
- sources:
142
- _tempSelectedSources.isNotEmpty
143
- ? _tempSelectedSources
144
- : null ,
145
- eventCountries:
146
- _tempSelectedCountries.isNotEmpty
147
- ? _tempSelectedCountries
148
- : null ,
149
- ),
125
+ // Apply Button
126
+ IconButton (
127
+ icon: const Icon (Icons .check),
128
+ tooltip: l10n.headlinesFeedFilterApplyButton,
129
+ onPressed: () {
130
+ // Apply the temporary filters to the BLoC
131
+ context.read <HeadlinesFeedBloc >().add (
132
+ HeadlinesFeedFiltersApplied (
133
+ filter: HeadlineFilter (
134
+ categories:
135
+ _tempSelectedCategories.isNotEmpty
136
+ ? _tempSelectedCategories
137
+ : null ,
138
+ sources:
139
+ _tempSelectedSources.isNotEmpty
140
+ ? _tempSelectedSources
141
+ : null ,
142
+ eventCountries:
143
+ _tempSelectedCountries.isNotEmpty
144
+ ? _tempSelectedCountries
145
+ : null ,
150
146
),
151
- );
152
- context. pop (); // Close the filter page
153
- },
154
- ) ,
155
- ] ,
156
- ) ,
157
- body : ListView (
158
- padding : const EdgeInsets . symmetric (vertical : AppSpacing .md),
159
- children : [
160
- _buildFilterTile (
161
- context : context,
162
- title : l10n.headlinesFeedFilterCategoryLabel ,
163
- selectedCount : _tempSelectedCategories.length ,
164
- routeName : Routes .feedFilterCategoriesName ,
165
- currentSelection : _tempSelectedCategories ,
166
- onResult : (result) {
167
- if (result is List < Category > ) {
168
- setState (() => _tempSelectedCategories = result);
169
- }
170
- },
171
- ) ,
172
- _buildFilterTile (
173
- context : context,
174
- title : l10n.headlinesFeedFilterSourceLabel ,
175
- selectedCount : _tempSelectedSources.length ,
176
- routeName : Routes .feedFilterSourcesName ,
177
- currentSelection : _tempSelectedSources ,
178
- onResult : (result) {
179
- if (result is List < Source > ) {
180
- setState (() => _tempSelectedSources = result);
181
- }
182
- },
183
- ) ,
184
- _buildFilterTile (
185
- context : context,
186
- title : l10n.headlinesFeedFilterEventCountryLabel ,
187
- selectedCount : _tempSelectedCountries.length ,
188
- routeName : Routes .feedFilterCountriesName ,
189
- currentSelection : _tempSelectedCountries ,
190
- onResult : (result) {
191
- if (result is List < Country > ) {
192
- setState (() => _tempSelectedCountries = result);
193
- }
194
- },
195
- ) ,
196
- ] ,
197
- ) ,
147
+ ),
148
+ );
149
+ context. pop (); // Close the filter page
150
+ } ,
151
+ ) ,
152
+ ] ,
153
+ ),
154
+ body : ListView (
155
+ padding : const EdgeInsets . symmetric (vertical : AppSpacing .md),
156
+ children : [
157
+ _buildFilterTile (
158
+ context : context ,
159
+ title : l10n.headlinesFeedFilterCategoryLabel ,
160
+ selectedCount : _tempSelectedCategories.length ,
161
+ routeName : Routes .feedFilterCategoriesName ,
162
+ currentSelection : _tempSelectedCategories,
163
+ onResult : (result) {
164
+ if (result is List < Category >) {
165
+ setState (() => _tempSelectedCategories = result);
166
+ }
167
+ } ,
168
+ ),
169
+ _buildFilterTile (
170
+ context : context ,
171
+ title : l10n.headlinesFeedFilterSourceLabel ,
172
+ selectedCount : _tempSelectedSources.length ,
173
+ routeName : Routes .feedFilterSourcesName ,
174
+ currentSelection : _tempSelectedSources,
175
+ onResult : (result) {
176
+ if (result is List < Source >) {
177
+ setState (() => _tempSelectedSources = result);
178
+ }
179
+ } ,
180
+ ),
181
+ _buildFilterTile (
182
+ context : context ,
183
+ title : l10n.headlinesFeedFilterEventCountryLabel ,
184
+ selectedCount : _tempSelectedCountries.length ,
185
+ routeName : Routes .feedFilterCountriesName ,
186
+ currentSelection : _tempSelectedCountries,
187
+ onResult : (result) {
188
+ if (result is List < Country >) {
189
+ setState (() => _tempSelectedCountries = result);
190
+ }
191
+ } ,
192
+ ) ,
193
+ ] ,
198
194
),
199
195
);
200
196
}
0 commit comments