@@ -60,20 +60,22 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
60
60
) async {
61
61
emit (HeadlinesFeedLoading ()); // Show loading for filter application
62
62
try {
63
- final response = await _headlinesRepository.readAllByQuery ({
64
- if (event.filter.categories? .isNotEmpty ?? false )
65
- 'categories' :
66
- event.filter.categories!
67
- .whereType <Category >()
68
- .map ((c) => c.id)
69
- .toList (),
70
- if (event.filter.sources? .isNotEmpty ?? false )
71
- 'sources' :
72
- event.filter.sources!
73
- .whereType <Source >()
74
- .map ((s) => s.id)
75
- .toList (),
76
- }, limit: _headlinesFetchLimit,);
63
+ final queryParams = < String , dynamic > {};
64
+ if (event.filter.categories? .isNotEmpty ?? false ) {
65
+ queryParams['categories' ] = event.filter.categories!
66
+ .map ((c) => c.id)
67
+ .join (',' );
68
+ }
69
+ if (event.filter.sources? .isNotEmpty ?? false ) {
70
+ queryParams['sources' ] = event.filter.sources!
71
+ .map ((s) => s.id)
72
+ .join (',' );
73
+ }
74
+
75
+ final response = await _headlinesRepository.readAllByQuery (
76
+ queryParams,
77
+ limit: _headlinesFetchLimit,
78
+ );
77
79
emit (
78
80
HeadlinesFeedLoaded (
79
81
headlines: response.items,
@@ -133,8 +135,8 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
133
135
Emitter <HeadlinesFeedState > emit,
134
136
) async {
135
137
// Determine current filter and cursor based on state
136
- var currentFilter = const HeadlineFilter ();
137
- var currentCursor =
138
+ HeadlineFilter currentFilter = const HeadlineFilter (); // Made type explicit
139
+ String ? currentCursor = // Made type explicit
138
140
event.cursor; // Use event's cursor if provided (for pagination)
139
141
var currentHeadlines = < Headline > [];
140
142
var isPaginating = false ;
@@ -169,21 +171,20 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
169
171
}
170
172
171
173
try {
174
+ final queryParams = < String , dynamic > {};
175
+ if (currentFilter.categories? .isNotEmpty ?? false ) {
176
+ queryParams['categories' ] = currentFilter.categories!
177
+ .map ((c) => c.id)
178
+ .join (',' );
179
+ }
180
+ if (currentFilter.sources? .isNotEmpty ?? false ) {
181
+ queryParams['sources' ] = currentFilter.sources!
182
+ .map ((s) => s.id)
183
+ .join (',' );
184
+ }
185
+
172
186
final response = await _headlinesRepository.readAllByQuery (
173
- {
174
- if (currentFilter.categories? .isNotEmpty ?? false )
175
- 'categories' :
176
- currentFilter.categories!
177
- .whereType <Category >()
178
- .map ((c) => c.id)
179
- .toList (),
180
- if (currentFilter.sources? .isNotEmpty ?? false )
181
- 'sources' :
182
- currentFilter.sources!
183
- .whereType <Source >()
184
- .map ((s) => s.id)
185
- .toList (),
186
- },
187
+ queryParams,
187
188
limit: _headlinesFetchLimit,
188
189
startAfterId: currentCursor, // Use determined cursor
189
190
);
@@ -216,27 +217,29 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
216
217
emit (HeadlinesFeedLoading ()); // Show loading indicator for refresh
217
218
218
219
// Determine the filter currently applied in the state
219
- var currentFilter = const HeadlineFilter ();
220
+ HeadlineFilter currentFilter = const HeadlineFilter (); // Made type explicit
220
221
if (state is HeadlinesFeedLoaded ) {
221
222
currentFilter = (state as HeadlinesFeedLoaded ).filter;
222
223
}
223
224
224
225
try {
226
+ final queryParams = < String , dynamic > {};
227
+ if (currentFilter.categories? .isNotEmpty ?? false ) {
228
+ queryParams['categories' ] = currentFilter.categories!
229
+ .map ((c) => c.id)
230
+ .join (',' );
231
+ }
232
+ if (currentFilter.sources? .isNotEmpty ?? false ) {
233
+ queryParams['sources' ] = currentFilter.sources!
234
+ .map ((s) => s.id)
235
+ .join (',' );
236
+ }
237
+
225
238
// Fetch the first page using the current filter
226
- final response = await _headlinesRepository.readAllByQuery ({
227
- if (currentFilter.categories? .isNotEmpty ?? false )
228
- 'categories' :
229
- currentFilter.categories!
230
- .whereType <Category >()
231
- .map ((c) => c.id)
232
- .toList (),
233
- if (currentFilter.sources? .isNotEmpty ?? false )
234
- 'sources' :
235
- currentFilter.sources!
236
- .whereType <Source >()
237
- .map ((s) => s.id)
238
- .toList (),
239
- }, limit: _headlinesFetchLimit,);
239
+ final response = await _headlinesRepository.readAllByQuery (
240
+ queryParams,
241
+ limit: _headlinesFetchLimit,
242
+ );
240
243
emit (
241
244
HeadlinesFeedLoaded (
242
245
headlines: response.items, // Replace headlines on refresh
0 commit comments