Skip to content

Commit 3e5bf5c

Browse files
committed
refactor(search): support multiple search models
- Generalize results list - Add selectedModelType to state - Update props for states
1 parent 828a590 commit 3e5bf5c

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed
Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,74 @@
11
part of 'headlines_search_bloc.dart';
22

33
abstract class HeadlinesSearchState extends Equatable {
4-
const HeadlinesSearchState();
5-
// lastSearchTerm will be defined in specific states that need it.
4+
const HeadlinesSearchState({
5+
this.selectedModelType = SearchModelType.headline,
6+
});
7+
8+
final SearchModelType selectedModelType;
9+
610
@override
7-
List<Object?> get props => [];
11+
List<Object?> get props => [selectedModelType];
812
}
913

1014
/// Initial state before any search is performed.
1115
class HeadlinesSearchInitial extends HeadlinesSearchState {
12-
const HeadlinesSearchInitial();
13-
// No lastSearchTerm needed for initial state.
16+
const HeadlinesSearchInitial({super.selectedModelType});
1417
}
1518

1619
/// State when a search is actively in progress.
1720
class HeadlinesSearchLoading extends HeadlinesSearchState {
18-
const HeadlinesSearchLoading({this.lastSearchTerm});
19-
final String? lastSearchTerm; // Term being loaded
21+
const HeadlinesSearchLoading({
22+
required this.lastSearchTerm,
23+
required super.selectedModelType,
24+
});
25+
final String lastSearchTerm; // Term being loaded
2026

2127
@override
22-
List<Object?> get props => [lastSearchTerm];
28+
List<Object?> get props => [...super.props, lastSearchTerm];
2329
}
2430

2531
/// State when a search has successfully returned results.
2632
class HeadlinesSearchSuccess extends HeadlinesSearchState {
2733
const HeadlinesSearchSuccess({
28-
required this.headlines,
34+
required this.results,
2935
required this.hasMore,
3036
required this.lastSearchTerm,
37+
required super.selectedModelType, // The model type for these results
3138
this.cursor,
3239
this.errorMessage, // For non-critical errors like pagination failure
3340
});
3441

35-
final List<Headline> headlines;
42+
final List<dynamic> results; // Can hold Headline, Category, Source, Country
3643
final bool hasMore;
3744
final String? cursor;
3845
final String? errorMessage; // e.g., for pagination errors
3946
final String lastSearchTerm; // The term that yielded these results
4047

4148
HeadlinesSearchSuccess copyWith({
42-
List<Headline>? headlines,
49+
List<dynamic>? results,
4350
bool? hasMore,
4451
String? cursor,
45-
String? errorMessage, // Allow clearing/setting error
52+
String? errorMessage,
4653
String? lastSearchTerm,
54+
SearchModelType? selectedModelType,
4755
bool clearErrorMessage = false,
4856
}) {
4957
return HeadlinesSearchSuccess(
50-
headlines: headlines ?? this.headlines,
58+
results: results ?? this.results,
5159
hasMore: hasMore ?? this.hasMore,
5260
cursor: cursor ?? this.cursor,
5361
errorMessage:
5462
clearErrorMessage ? null : errorMessage ?? this.errorMessage,
5563
lastSearchTerm: lastSearchTerm ?? this.lastSearchTerm,
64+
selectedModelType: selectedModelType ?? this.selectedModelType,
5665
);
5766
}
5867

5968
@override
6069
List<Object?> get props => [
61-
headlines,
70+
...super.props,
71+
results,
6272
hasMore,
6373
cursor,
6474
errorMessage,
@@ -71,11 +81,12 @@ class HeadlinesSearchFailure extends HeadlinesSearchState {
7181
const HeadlinesSearchFailure({
7282
required this.errorMessage,
7383
required this.lastSearchTerm,
84+
required super.selectedModelType,
7485
});
7586

7687
final String errorMessage;
7788
final String lastSearchTerm; // The term that failed
7889

7990
@override
80-
List<Object?> get props => [errorMessage, lastSearchTerm];
91+
List<Object?> get props => [...super.props, errorMessage, lastSearchTerm];
8192
}

0 commit comments

Comments
 (0)