|
| 1 | +// |
1 | 2 | // ignore_for_file: lines_longer_than_80_chars
|
2 | 3 |
|
3 | 4 | import 'package:flutter/material.dart';
|
@@ -101,96 +102,99 @@ class _HeadlinesFilterPageState extends State<HeadlinesFilterPage> {
|
101 | 102 | Widget build(BuildContext context) {
|
102 | 103 | final l10n = context.l10n;
|
103 | 104 |
|
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 |
| - }, |
| 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 |
124 | 113 | ),
|
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, |
| 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 | + ), |
146 | 150 | ),
|
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 |
| - ], |
| 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 | + ), |
194 | 198 | ),
|
195 | 199 | );
|
196 | 200 | }
|
|
0 commit comments