Skip to content

Commit d6cdb86

Browse files
committed
Refactor SearchResults.
1 parent b777431 commit d6cdb86

File tree

2 files changed

+33
-22
lines changed

2 files changed

+33
-22
lines changed

lib/search_data_source.dart

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,23 @@ class Promotion {
5555
Promotion(this.promotion);
5656
}
5757

58+
class NextPage {
59+
final customsearch.Query query;
60+
61+
NextPage(this.query);
62+
}
63+
5864
/// A wrapper class to aggregate all the search result fields that we need.
5965
class SearchResults {
60-
List<SearchResult> searchResults;
61-
List<Promotion> promotions;
66+
List<SearchResult> searchResults = List<SearchResult>();
67+
List<Promotion> promotions = List<Promotion>();
68+
69+
SearchResults.empty();
6270

63-
SearchResults({this.searchResults, this.promotions}) {
64-
this.searchResults ??= List<SearchResult>();
65-
this.promotions ??= List<Promotion>();
71+
SearchResults(customsearch.Search search) {
72+
search.items.forEach(
73+
(item) =>
74+
searchResults.add(SearchResult.escapeLineBreakInSnippet(item)));
6675
}
6776
}
6877

@@ -105,18 +114,15 @@ class FakeSearchDataSource implements SearchDataSource {
105114
@override
106115
Future<SearchResults> search(String query, {String searchType}) async {
107116
if (!searchResponses.containsKey(query)) {
108-
return SearchResults();
117+
return SearchResults.empty();
109118
}
110119
if (searchResponses[query].searchType != searchType) {
111-
return SearchResults();
120+
return SearchResults.empty();
112121
}
113122
var results = List<SearchResult>();
114123
Map searchMap = jsonDecode(searchResponses[query].searchResponseJsonString);
115124
customsearch.Search search = customsearch.Search.fromJson(searchMap);
116-
search.items.forEach(
117-
(item) => results.add(SearchResult.escapeLineBreakInSnippet(item)));
118-
return SearchResults(
119-
searchResults: Set<SearchResult>.from(results).toList());
125+
return SearchResults(search);
120126
}
121127
}
122128

@@ -125,6 +131,7 @@ class CustomSearchDataSource implements SearchDataSource {
125131
final String cx;
126132
final String apiKey;
127133
var api;
134+
int searchCount = 0;
128135

129136
CustomSearchDataSource({@required this.cx, @required this.apiKey}) {
130137
var client = auth.clientViaApiKey(apiKey);
@@ -133,14 +140,15 @@ class CustomSearchDataSource implements SearchDataSource {
133140

134141
@override
135142
Future<SearchResults> search(String query, {String searchType}) async {
143+
if (query.isEmpty) {
144+
return SearchResults.empty();
145+
}
136146
var results = List<SearchResult>();
137147
customsearch.Search search =
138-
await this.api.cse.list(query, cx: this.cx, searchType: searchType);
139-
if (search.items != null) {
140-
search.items.forEach((item) => results.add(SearchResult(item)));
141-
}
142-
return SearchResults(
143-
searchResults: Set<SearchResult>.from(results).toList());
148+
await this.api.cse.list(query, cx: this.cx, searchType: searchType);
149+
searchCount += 1;
150+
print("search count: $searchCount");
151+
return SearchResults(search);
144152
}
145153
}
146154

lib/search_result_page.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class WebSearchResultCard extends StatelessWidget {
6868
bottom: 8.0,
6969
),
7070
child: Container(
71-
padding: const EdgeInsets.only(right: 6.0),
71+
padding: const EdgeInsets.only(right: 10.0),
7272
child: Text(
7373
this.searchResult.result.snippet,
7474
style: theme.textTheme.body1,
@@ -251,8 +251,11 @@ class CustomSearchSearchDelegate extends SearchDelegate<SearchResult> {
251251
);
252252
}
253253

254+
int buildResultCount = 0;
254255
@override
255256
Widget buildResults(BuildContext context) {
257+
buildResultCount += 1;
258+
print(buildResultCount);
256259
return FutureBuilder<SearchResults>(
257260
future: dataSource.search(query,
258261
searchType: this.searchType == SearchType.web ? null : 'image'),
@@ -275,10 +278,10 @@ class CustomSearchSearchDelegate extends SearchDelegate<SearchResult> {
275278
padding: const EdgeInsets.all(4.0),
276279
children: List.generate(snapshot.data.searchResults.length,
277280
(index) {
278-
return new ImageSearchResultCard(
279-
searchResult: snapshot.data.searchResults[index],
280-
searchDelegate: this);
281-
}));
281+
return new ImageSearchResultCard(
282+
searchResult: snapshot.data.searchResults[index],
283+
searchDelegate: this);
284+
}));
282285
case SearchType.web:
283286
return ListView.builder(
284287
itemCount: snapshot.data.searchResults.length,

0 commit comments

Comments
 (0)