@@ -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.
5965class 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
0 commit comments