2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-05-01 15:06:49 +00:00

Search fix (#208)

* Prevent setState if search widget is not mounted

* Prevent search textbox from disappearing
This commit is contained in:
Oliver 2022-09-10 13:11:34 +10:00 committed by GitHub
parent 38b34e0fd9
commit c25175ac54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -36,6 +36,8 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
_SearchDisplayState(this.hasAppBar) : super(); _SearchDisplayState(this.hasAppBar) : super();
final _formKey = GlobalKey<FormState>();
final bool hasAppBar; final bool hasAppBar;
@override @override
@ -105,6 +107,9 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
} else { } else {
debounceTimer = Timer(Duration(milliseconds: 250), () { debounceTimer = Timer(Duration(milliseconds: 250), () {
search(text); search(text);
if (!_focusNode.hasFocus) {
_focusNode.requestFocus();
}
}); });
} }
} }
@ -120,6 +125,10 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
var api = InvenTreeAPI(); var api = InvenTreeAPI();
if (!mounted) {
return;
}
setState(() { setState(() {
// Do not search on an empty string // Do not search on an empty string
nPartResults = 0; nPartResults = 0;
@ -140,10 +149,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("part", "view")) { if (api.checkPermission("part", "view")) {
InvenTreePart().count(searchQuery: term).then((int n) { InvenTreePart().count(searchQuery: term).then((int n) {
if (term == searchController.text) { if (term == searchController.text) {
setState(() { if (mounted) {
nPartResults = n; setState(() {
nSearchResults++; nPartResults = n;
}); nSearchResults++;
});
}
} }
}); });
} }
@ -152,10 +163,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("part_category", "view")) { if (api.checkPermission("part_category", "view")) {
InvenTreePartCategory().count(searchQuery: term,).then((int n) { InvenTreePartCategory().count(searchQuery: term,).then((int n) {
if (term == searchController.text) { if (term == searchController.text) {
setState(() { if (mounted) {
nCategoryResults = n; setState(() {
nSearchResults++; nCategoryResults = n;
}); nSearchResults++;
});
}
} }
}); });
} }
@ -164,10 +177,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("stock", "view")) { if (api.checkPermission("stock", "view")) {
InvenTreeStockItem().count(searchQuery: term).then((int n) { InvenTreeStockItem().count(searchQuery: term).then((int n) {
if (term == searchController.text) { if (term == searchController.text) {
setState(() { if (mounted) {
nStockResults = n; setState(() {
nSearchResults++; nStockResults = n;
}); nSearchResults++;
});
}
} }
}); });
} }
@ -176,11 +191,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("stock_location", "view")) { if (api.checkPermission("stock_location", "view")) {
InvenTreeStockLocation().count(searchQuery: term).then((int n) { InvenTreeStockLocation().count(searchQuery: term).then((int n) {
if (term == searchController.text) { if (term == searchController.text) {
setState(() { if (mounted) {
nLocationResults = n; setState(() {
nLocationResults = n;
nSearchResults++; nSearchResults++;
}); });
}
} }
}); });
} }
@ -209,10 +225,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
} }
).then((int n) { ).then((int n) {
if (term == searchController.text) { if (term == searchController.text) {
setState(() { if (mounted) {
nPurchaseOrderResults = n; setState(() {
nSearchResults++; nPurchaseOrderResults = n;
}); nSearchResults++;
});
}
} }
}); });
} }
@ -229,13 +247,18 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
decoration: InputDecoration( decoration: InputDecoration(
hintText: L10().queryEmpty, hintText: L10().queryEmpty,
), ),
key: _formKey,
readOnly: false, readOnly: false,
autofocus: true, autofocus: false,
autocorrect: false, autocorrect: false,
focusNode: _focusNode, focusNode: _focusNode,
controller: searchController, controller: searchController,
onChanged: (String text) { onChanged: (String text) {
onSearchTextChanged(text); onSearchTextChanged(text);
_focusNode.requestFocus();
},
onFieldSubmitted: (String text) {
_focusNode.requestFocus();
}, },
), ),
trailing: GestureDetector( trailing: GestureDetector(
@ -245,6 +268,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
), ),
onTap: () { onTap: () {
searchController.clear(); searchController.clear();
_focusNode.requestFocus();
onSearchTextChanged("", immediate: true); onSearchTextChanged("", immediate: true);
}, },
), ),