Skip to content

Commit

Permalink
fix: "Stores" field to not show loading spinner (#4669) (#4678)
Browse files Browse the repository at this point in the history
* fix: Loading when no suggestions (#4669)

Loading spinner was showing, even if there were no loading or
suggestions available.

Fixes #4669

* refactor: Simple input text field loading

Also fixes crash and properly disables loading, when try-catch block throws exception.
  • Loading branch information
WildOrangutan committed Oct 2, 2023
1 parent c31e458 commit 6fb5e18
Showing 1 changed file with 20 additions and 17 deletions.
37 changes: 20 additions & 17 deletions packages/smooth_app/lib/pages/product/simple_input_text_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -75,27 +75,31 @@ class _SimpleInputTextFieldState extends State<SimpleInputTextField> {
Future<_SearchResults> _getSuggestions(String search) async {
final DateTime start = DateTime.now();

if (_suggestions[search] == null) {
if (_manager == null || search.length < widget.minLengthForSuggestions) {
_suggestions[search] = _SearchResults.empty();
} else {
try {
_suggestions[search] =
_SearchResults(await _manager!.getSuggestions(search));
} catch (_) {}
}
if (_suggestions[search] != null) {
return _suggestions[search]!;
} else if (_manager == null ||
search.length < widget.minLengthForSuggestions) {
_suggestions[search] = _SearchResults.empty();
return _suggestions[search]!;
}

if (_suggestions[search]?.isEmpty == true && search == _searchInput) {
_hideLoading();
_setLoading(true);

try {
_suggestions[search] =
_SearchResults(await _manager!.getSuggestions(search));
} catch (_) {}

if (_suggestions[search]?.isEmpty ?? true && search == _searchInput) {
_setLoading(false);
}

if (_searchInput != search &&
start.difference(DateTime.now()).inSeconds > 5) {
// Ignore this request, it's too long and this is not even the current search
return _SearchResults.empty();
} else {
return _suggestions[search]!;
return _suggestions[search] ?? _SearchResults.empty();
}
}

Expand Down Expand Up @@ -123,7 +127,6 @@ class _SimpleInputTextFieldState extends State<SimpleInputTextField> {
VoidCallback onFieldSubmitted) =>
TextField(
controller: widget.controller,
onChanged: (_) => setState(() => _loading = true),
decoration: InputDecoration(
filled: true,
border: const OutlineInputBorder(
Expand Down Expand Up @@ -170,7 +173,7 @@ class _SimpleInputTextFieldState extends State<SimpleInputTextField> {
}

if (input == _searchInput) {
_hideLoading();
_setLoading(false);
}

return AutocompleteOptions<String>(
Expand Down Expand Up @@ -199,10 +202,10 @@ class _SimpleInputTextFieldState extends State<SimpleInputTextField> {

String get _searchInput => widget.controller.text.trim();

void _hideLoading() {
if (_loading) {
void _setLoading(bool loading) {
if (_loading != loading) {
WidgetsBinding.instance.addPostFrameCallback(
(_) => setState(() => _loading = false),
(_) => setState(() => _loading = loading),
);
}
}
Expand Down

0 comments on commit 6fb5e18

Please sign in to comment.