Skip to content

Commit 0407737

Browse files
committed
Add cse_thumbnail in web search result card. Change to use flutter website as web search cse.
1 parent 6526305 commit 0407737

File tree

5 files changed

+30
-31
lines changed

5 files changed

+30
-31
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ samples, guidance on mobile development, and a full API reference.
2222

2323
### watch demo on youtube.
2424

25-
[![demo_on_youtube](https://img.youtube.com/vi/XGHUHn-C780/hqdefault.jpg)](https://youtu.be/XGHUHn-C780)
25+
[![demo_on_youtube](https://img.youtube.com/vi/F0SX3IMYbv8/hqdefault.jpg)](https://youtu.be/F0SX3IMYbv8)

lib/custom_search_search_delegate.dart

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter/foundation.dart';
23
import 'package:flutter_app_cse/search_data_source.dart';
34

45
import 'ui/no_result_card.dart';
@@ -206,30 +207,6 @@ class CustomSearchSearchDelegate extends SearchDelegate<SearchResult> {
206207
}
207208
}
208209

209-
class KeepAliveFutureBuilder extends StatefulWidget {
210-
final Future future;
211-
final AsyncWidgetBuilder builder;
212-
213-
KeepAliveFutureBuilder({this.future, this.builder});
214-
215-
@override
216-
_KeepAliveFutureBuilderState createState() => _KeepAliveFutureBuilderState();
217-
}
218-
219-
class _KeepAliveFutureBuilderState extends State<KeepAliveFutureBuilder>
220-
with AutomaticKeepAliveClientMixin {
221-
@override
222-
Widget build(BuildContext context) {
223-
return FutureBuilder(
224-
future: widget.future,
225-
builder: widget.builder,
226-
);
227-
}
228-
229-
@override
230-
bool get wantKeepAlive => true;
231-
}
232-
233210
/// A SearchDelegate that will render the result page as infinite scroll view.
234211
class CustomSearchInfiniteSearchDelegate extends CustomSearchSearchDelegate {
235212
CustomSearchInfiniteSearchDelegate({dataSource,
@@ -275,10 +252,14 @@ class CustomSearchInfiniteSearchDelegate extends CustomSearchSearchDelegate {
275252
}
276253

277254
_loadNextPage() {
255+
278256
dataSource.search(currentSearchResults.nextPage).then((value) {
279257
this.currentSearchResults = value;
280258
this.currentResultLength +=
281259
this.currentSearchResults.searchResults.length;
260+
debugPrint(
261+
'current result length ${this.currentSearchResults.searchResults
262+
.length}');
282263
});
283264
}
284265

lib/search_data_source.dart

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class SearchResults {
6262
List<SearchResult> searchResults = List<SearchResult>();
6363
List<Promotion> promotions = List<Promotion>();
6464
SearchQuery nextPage;
65+
SearchQuery previousPage;
6566

6667
SearchResults.empty();
6768

@@ -72,6 +73,12 @@ class SearchResults {
7273
// Deduplicate search result.
7374
this.searchResults = Set<SearchResult>.from(results).toList();
7475
}
76+
77+
@override
78+
String toString() {
79+
return 'SearchResults{searchResults: $searchResults, nextPage: $nextPage}';
80+
}
81+
7582
}
7683

7784
/// A wrapper class for search request, to make caching search request possible.
@@ -184,6 +191,10 @@ class SearchQuery {
184191
result.nextPage =
185192
this.copyWith(start: search.queries['nextPage'][0].startIndex);
186193
}
194+
if (search.queries['previousPage'] != null) {
195+
result.previousPage =
196+
this.copyWith(start: search.queries['previousPage'][0].startIndex);
197+
}
187198
return result;
188199
}
189200

@@ -349,7 +360,7 @@ class _StaticSearchResponse {
349360
{this.assetPath, this.searchType, this.searchResponseJsonString});
350361
}
351362

352-
/// A fake search data source, that reads data from flutter assests.
363+
/// A fake search data source, that reads data from flutter assets.
353364
///
354365
/// Choose to do the caching in this class, rather than in the
355366
/// [SearchDelegate.showResults]. Because this is controllable by developer,
@@ -409,7 +420,7 @@ class FakeSearchDataSource implements SearchDataSource {
409420
}
410421
}
411422

412-
/// The search data source that uses Custom Search API.
423+
/// Cached search data source that uses Custom Search API.
413424
///
414425
/// Choose to do the caching in this class, rather than in the
415426
/// [SearchDelegate.showResults]. Because this is controllable by developer,
@@ -445,6 +456,7 @@ class CustomSearchDataSource implements SearchDataSource {
445456
}
446457

447458
final result = await searchQuery.runSearch(this.api);
459+
print('call search backend');
448460
_cache.set(searchQuery, result);
449461
return result;
450462
}

lib/ui/custom_search_demo_page.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class _CustomSearchDemoPageState extends State<CustomSearchDemoPage> {
6666
}
6767

6868
_CustomSearchDemoPageState.customImageSearch() {
69+
// Pokemon db.
6970
this.delegate = new CustomSearchInfiniteSearchDelegate.imageSearch(
7071
dataSource: CustomSearchDataSource(
7172
cx: '013098254965507895640:wyytcpldjbw',
@@ -77,9 +78,10 @@ class _CustomSearchDemoPageState extends State<CustomSearchDemoPage> {
7778
}
7879

7980
_CustomSearchDemoPageState.customWebSearch() {
81+
// Flutter
8082
this.delegate = new CustomSearchInfiniteSearchDelegate(
8183
dataSource: CustomSearchDataSource(
82-
cx: '013098254965507895640:0l32iqt_8jq',
84+
cx: '013098254965507895640:ebp1trsjo0a',
8385
apiKey: ''));
8486
this.hintText = 'Google Custom Web Search';
8587
otherRoutes = [

lib/ui/web_search_result_card.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ class WebSearchResultCard extends StatelessWidget {
3232

3333
Widget _generateBodyTile(BuildContext context) {
3434
final ThemeData theme = Theme.of(context);
35-
bool haveThumbnail = this.searchResult.result.pagemap['thumbnail'] != null;
35+
bool haveThumbnail =
36+
this.searchResult.result.pagemap['thumbnail'] != null ||
37+
this.searchResult.result.pagemap['cse_thumbnail'] != null;
3638
if (!haveThumbnail) {
3739
return Container(
3840
padding: const EdgeInsets.only(
@@ -57,8 +59,10 @@ class WebSearchResultCard extends StatelessWidget {
5759
Expanded(
5860
flex: 1,
5961
child: Image.network(
60-
this.searchResult.result.pagemap['thumbnail'][0]['src'])
61-
),
62+
this.searchResult.result.pagemap['thumbnail'] != null
63+
? this.searchResult.result.pagemap['thumbnail'][0]['src']
64+
: this.searchResult.result.pagemap['cse_thumbnail'][0]
65+
['src'])),
6266
Expanded(
6367
flex: 4,
6468
child: Container(

0 commit comments

Comments
 (0)