mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-10-31 13:25:40 +00:00 
			
		
		
		
	Search fix (#208)
* Prevent setState if search widget is not mounted * Prevent search textbox from disappearing
This commit is contained in:
		| @@ -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,10 +149,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | ||||
|     if (api.checkPermission("part", "view")) { | ||||
|       InvenTreePart().count(searchQuery: term).then((int n) { | ||||
|         if (term == searchController.text) { | ||||
|           setState(() { | ||||
|             nPartResults = n; | ||||
|             nSearchResults++; | ||||
|           }); | ||||
|           if (mounted) { | ||||
|             setState(() { | ||||
|               nPartResults = n; | ||||
|               nSearchResults++; | ||||
|             }); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
| @@ -152,10 +163,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | ||||
|     if (api.checkPermission("part_category", "view")) { | ||||
|       InvenTreePartCategory().count(searchQuery: term,).then((int n) { | ||||
|         if (term == searchController.text) { | ||||
|           setState(() { | ||||
|             nCategoryResults = n; | ||||
|             nSearchResults++; | ||||
|           }); | ||||
|           if (mounted) { | ||||
|             setState(() { | ||||
|               nCategoryResults = n; | ||||
|               nSearchResults++; | ||||
|             }); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
| @@ -164,10 +177,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | ||||
|     if (api.checkPermission("stock", "view")) { | ||||
|       InvenTreeStockItem().count(searchQuery: term).then((int n) { | ||||
|         if (term == searchController.text) { | ||||
|           setState(() { | ||||
|             nStockResults = n; | ||||
|             nSearchResults++; | ||||
|           }); | ||||
|           if (mounted) { | ||||
|             setState(() { | ||||
|               nStockResults = n; | ||||
|               nSearchResults++; | ||||
|             }); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
| @@ -176,11 +191,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | ||||
|     if (api.checkPermission("stock_location", "view")) { | ||||
|       InvenTreeStockLocation().count(searchQuery: term).then((int n) { | ||||
|         if (term == searchController.text) { | ||||
|           setState(() { | ||||
|             nLocationResults = n; | ||||
|  | ||||
|             nSearchResults++; | ||||
|           }); | ||||
|           if (mounted) { | ||||
|             setState(() { | ||||
|               nLocationResults = n; | ||||
|               nSearchResults++; | ||||
|             }); | ||||
|           } | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
| @@ -209,10 +225,12 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | ||||
|           } | ||||
|       ).then((int n) { | ||||
|         if (term == searchController.text) { | ||||
|           setState(() { | ||||
|             nPurchaseOrderResults = n; | ||||
|             nSearchResults++; | ||||
|           }); | ||||
|           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); | ||||
|           }, | ||||
|         ), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user