mirror of
https://github.com/inventree/inventree-app.git
synced 2025-05-01 06:56:50 +00:00
Search fix (#208)
* Prevent setState if search widget is not mounted * Prevent search textbox from disappearing
This commit is contained in:
parent
38b34e0fd9
commit
c25175ac54
@ -36,6 +36,8 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
|
||||
_SearchDisplayState(this.hasAppBar) : super();
|
||||
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
|
||||
final bool hasAppBar;
|
||||
|
||||
@override
|
||||
@ -105,6 +107,9 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
} else {
|
||||
debounceTimer = Timer(Duration(milliseconds: 250), () {
|
||||
search(text);
|
||||
if (!_focusNode.hasFocus) {
|
||||
_focusNode.requestFocus();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -120,6 +125,10 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
|
||||
var api = InvenTreeAPI();
|
||||
|
||||
if (!mounted) {
|
||||
return;
|
||||
}
|
||||
|
||||
setState(() {
|
||||
// Do not search on an empty string
|
||||
nPartResults = 0;
|
||||
@ -140,11 +149,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
if (api.checkPermission("part", "view")) {
|
||||
InvenTreePart().count(searchQuery: term).then((int n) {
|
||||
if (term == searchController.text) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
nPartResults = n;
|
||||
nSearchResults++;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -152,11 +163,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
if (api.checkPermission("part_category", "view")) {
|
||||
InvenTreePartCategory().count(searchQuery: term,).then((int n) {
|
||||
if (term == searchController.text) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
nCategoryResults = n;
|
||||
nSearchResults++;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -164,11 +177,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
if (api.checkPermission("stock", "view")) {
|
||||
InvenTreeStockItem().count(searchQuery: term).then((int n) {
|
||||
if (term == searchController.text) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
nStockResults = n;
|
||||
nSearchResults++;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -176,12 +191,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
if (api.checkPermission("stock_location", "view")) {
|
||||
InvenTreeStockLocation().count(searchQuery: term).then((int n) {
|
||||
if (term == searchController.text) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
nLocationResults = n;
|
||||
|
||||
nSearchResults++;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -209,11 +225,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
}
|
||||
).then((int n) {
|
||||
if (term == searchController.text) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
nPurchaseOrderResults = n;
|
||||
nSearchResults++;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -229,13 +247,18 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
decoration: InputDecoration(
|
||||
hintText: L10().queryEmpty,
|
||||
),
|
||||
key: _formKey,
|
||||
readOnly: false,
|
||||
autofocus: true,
|
||||
autofocus: false,
|
||||
autocorrect: false,
|
||||
focusNode: _focusNode,
|
||||
controller: searchController,
|
||||
onChanged: (String text) {
|
||||
onSearchTextChanged(text);
|
||||
_focusNode.requestFocus();
|
||||
},
|
||||
onFieldSubmitted: (String text) {
|
||||
_focusNode.requestFocus();
|
||||
},
|
||||
),
|
||||
trailing: GestureDetector(
|
||||
@ -245,6 +268,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
|
||||
),
|
||||
onTap: () {
|
||||
searchController.clear();
|
||||
_focusNode.requestFocus();
|
||||
onSearchTextChanged("", immediate: true);
|
||||
},
|
||||
),
|
||||
|
Loading…
x
Reference in New Issue
Block a user