|
@@ -57,7 +57,6 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|
|
|
|
|
@override
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Widget build(BuildContext context) {
|
|
- print('building search');
|
|
|
|
return GestureDetector(
|
|
return GestureDetector(
|
|
onTap: () {
|
|
onTap: () {
|
|
Navigator.pop(context);
|
|
Navigator.pop(context);
|
|
@@ -104,6 +103,8 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|
.withOpacity(0.5),
|
|
.withOpacity(0.5),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
|
|
+ /*Using valueListenableBuilder inside a stateful widget because this widget is only rebuild when
|
|
|
|
+ setState is called when deboucncing is over and the spinner needs to be shown while debouncing */
|
|
suffixIcon: ValueListenableBuilder(
|
|
suffixIcon: ValueListenableBuilder(
|
|
valueListenable: _debouncer.debounceActiveNotifier,
|
|
valueListenable: _debouncer.debounceActiveNotifier,
|
|
builder: (
|
|
builder: (
|
|
@@ -111,7 +112,6 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|
bool isDebouncing,
|
|
bool isDebouncing,
|
|
Widget child,
|
|
Widget child,
|
|
) {
|
|
) {
|
|
- print(_debouncer.debounceActiveNotifier.value);
|
|
|
|
return SearchSuffixIcon(
|
|
return SearchSuffixIcon(
|
|
isDebouncing,
|
|
isDebouncing,
|
|
);
|
|
);
|
|
@@ -119,11 +119,13 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|
),
|
|
),
|
|
),
|
|
),
|
|
onChanged: (value) async {
|
|
onChanged: (value) async {
|
|
|
|
+ _query = value;
|
|
final List<SearchResult> allResults =
|
|
final List<SearchResult> allResults =
|
|
await getSearchResultsForQuery(value);
|
|
await getSearchResultsForQuery(value);
|
|
- if (mounted) {
|
|
|
|
|
|
+ /*checking if _query == value to make sure that the results are from the current query
|
|
|
|
+ and not from the previous query (race condition).*/
|
|
|
|
+ if (mounted && _query == value) {
|
|
setState(() {
|
|
setState(() {
|
|
- _query = value;
|
|
|
|
_results.clear();
|
|
_results.clear();
|
|
_results.addAll(allResults);
|
|
_results.addAll(allResults);
|
|
});
|
|
});
|
|
@@ -148,7 +150,6 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|
|
|
|
|
@override
|
|
@override
|
|
void dispose() {
|
|
void dispose() {
|
|
- print('dispose');
|
|
|
|
_debouncer.cancelDebounce();
|
|
_debouncer.cancelDebounce();
|
|
super.dispose();
|
|
super.dispose();
|
|
}
|
|
}
|
|
@@ -192,7 +193,6 @@ class _SearchWidgetState extends State<SearchWidget> {
|
|
|
|
|
|
final monthResults = await _searchService.getMonthSearchResults(query);
|
|
final monthResults = await _searchService.getMonthSearchResults(query);
|
|
allResults.addAll(monthResults);
|
|
allResults.addAll(monthResults);
|
|
-
|
|
|
|
completer.complete(allResults);
|
|
completer.complete(allResults);
|
|
}
|
|
}
|
|
|
|
|