diff --git a/lib/api.dart b/lib/api.dart index 01b551a9..b7ef059d 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -423,14 +423,12 @@ class InvenTreeAPI { // Perform a PATCH request - Future patch(String url, {Map? body, int expectedStatusCode=200}) async { + Future patch(String url, {Map body = const {}, int expectedStatusCode=200}) async { var _url = makeApiUrl(url); var _body = Map(); // Copy across provided data - if (body != null) { - body.forEach((K, V) => _body[K] = V); - } + body.forEach((K, V) => _body[K] = V); print("PATCH: " + _url); @@ -512,18 +510,18 @@ class InvenTreeAPI { return null; }); - if (response == null) { - print("null response from PATCH ${_url}"); - return null; - } + var responseData = await responseToJson(response); if (response.statusCode != expectedStatusCode) { showStatusCodeError(response.statusCode); + + print("PATCH to ${_url} returned status code ${response.statusCode}"); + print("Data:"); + print(responseData); + return null; } - var responseData = await responseToJson(response); - return responseData; } @@ -558,7 +556,7 @@ class InvenTreeAPI { * Perform a HTTP POST request * Returns a json object (or null if unsuccessful) */ - Future post(String url, {Map? body, int expectedStatusCode=201}) async { + Future post(String url, {Map body = const {}, int expectedStatusCode=201}) async { var _url = makeApiUrl(url); @@ -600,10 +598,6 @@ class InvenTreeAPI { return null; }); - if (request == null) { - return null; - } - var data = json.encode(body); // Set headers @@ -647,13 +641,18 @@ class InvenTreeAPI { return null; } + var responseData = await responseToJson(response); + if (response.statusCode != expectedStatusCode) { showStatusCodeError(response.statusCode); + + print("POST to ${_url} returned status code ${response.statusCode}"); + print("Data:"); + print(responseData); + return null; } - var responseData = await responseToJson(response); - return responseData; } @@ -690,13 +689,13 @@ class InvenTreeAPI { * and return the Response object * (or null if the request fails) */ - Future getResponse(String url, {Map? params}) async { + Future getResponse(String url, {Map params = const {}}) async { var _url = makeApiUrl(url); print("GET: ${_url}"); // If query parameters are supplied, form a query string - if (params != null && params.isNotEmpty) { + if (params.isNotEmpty) { String query = '?'; params.forEach((K, V) => query += K + '=' + V + '&'); @@ -785,10 +784,6 @@ class InvenTreeAPI { dynamic responseToJson(HttpClientResponse response) async { - if (response == null) { - return null; - } - String body = await response.transform(utf8.decoder).join(); try { @@ -813,7 +808,7 @@ class InvenTreeAPI { * Perform a HTTP GET request * Returns a json object (or null if did not complete) */ - Future get(String url, {Map? params, int expectedStatusCode=200}) async { + Future get(String url, {Map params = const {}, int expectedStatusCode=200}) async { var response = await getResponse(url, params: params); diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index 2fc5a81f..678739a6 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -142,11 +142,7 @@ class InvenTreeModel { // Search this Model type in the database - Future> search(BuildContext context, String searchTerm, {Map? filters}) async { - - if (filters == null) { - filters = {}; - } + Future> search(BuildContext context, String searchTerm, {Map filters = const {}}) async { filters["search"] = searchTerm; @@ -178,7 +174,7 @@ class InvenTreeModel { } // POST data to update the model - Future update({Map? values}) async { + Future update({Map values = const {}}) async { var addr = path.join(URL, pk.toString()); @@ -198,7 +194,7 @@ class InvenTreeModel { } // Return the detail view for the associated pk - Future get(int pk, {Map? filters}) async { + Future get(int pk, {Map filters = const {}}) async { // TODO - Add "timeout" // TODO - Add error catching @@ -211,11 +207,9 @@ class InvenTreeModel { var params = defaultGetFilters(); - if (filters != null) { - // Override any default values - for (String key in filters.keys) { - params[key] = filters[key] ?? ''; - } + // Override any default values + for (String key in filters.keys) { + params[key] = filters[key] ?? ''; } print("GET: $url ${params.toString()}"); @@ -250,13 +244,11 @@ class InvenTreeModel { return createFromJson(response); } - Future listPaginated(int limit, int offset, {Map? filters = null}) async { + Future listPaginated(int limit, int offset, {Map filters = const {}}) async { var params = defaultListFilters(); - if (filters != null) { - for (String key in filters.keys) { - params[key] = filters[key] ?? ''; - } + for (String key in filters.keys) { + params[key] = filters[key] ?? ''; } params["limit"] = "${limit}"; @@ -288,18 +280,12 @@ class InvenTreeModel { } // Return list of objects from the database, with optional filters - Future> list({Map? filters}) async { - - if (filters == null) { - filters = {}; - } + Future> list({Map filters = const {}}) async { var params = defaultListFilters(); - if (filters != null) { - for (String key in filters.keys) { - params[key] = filters[key] ?? ''; - } + for (String key in filters.keys) { + params[key] = filters[key] ?? ''; } print("LIST: $URL ${params.toString()}"); diff --git a/lib/widget/search.dart b/lib/widget/search.dart index f97ea59b..97ccde01 100644 --- a/lib/widget/search.dart +++ b/lib/widget/search.dart @@ -27,9 +27,20 @@ class PartSearchDelegate extends SearchDelegate { bool _searching = false; // Custom filters for the part search - Map filters = {}; + Map _filters = {}; - PartSearchDelegate(this.context, {this.filters = const {}}); + PartSearchDelegate(this.context, {Map filters = const {}}) { + + // Copy filter values + for (String key in filters.keys) { + + String? value = filters[key]; + + if (value != null) { + _filters[key] = value; + } + } + } @override String get searchFieldLabel => L10().searchParts; @@ -58,10 +69,9 @@ class PartSearchDelegate extends SearchDelegate { showResults(context); - // Enable cascading part search by default - filters["cascade"] = "true"; + _filters["cascade"] = "true"; - final results = await InvenTreePart().search(context, query, filters: filters); + final results = await InvenTreePart().search(context, query, filters: _filters); partResults.clear(); @@ -208,11 +218,18 @@ class StockSearchDelegate extends SearchDelegate { bool _searching = false; // Custom filters for the stock item search - Map? filters; + Map _filters = {}; - StockSearchDelegate(this.context, {this.filters}) { - if (filters == null) { - filters = {}; + StockSearchDelegate(this.context, {Map filters = const {}}) { + + // Copy filter values + for (String key in filters.keys) { + + String? value = filters[key]; + + if (value != null) { + _filters[key] = value; + } } } @@ -243,12 +260,10 @@ class StockSearchDelegate extends SearchDelegate { showResults(context); // Enable cascading part search by default - if (filters != null) { - filters?["cascade"] = "true"; - } + _filters["cascade"] = "true"; final results = await InvenTreeStockItem().search( - context, query, filters: filters); + context, query, filters: _filters); itemResults.clear();