2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-06-13 02:35:27 +00:00

More fixes for null safety support

This commit is contained in:
Oliver
2021-07-13 01:00:18 +10:00
parent 3c6039f757
commit 8b5bd0f213
3 changed files with 59 additions and 63 deletions

View File

@ -423,14 +423,12 @@ class InvenTreeAPI {
// Perform a PATCH request // Perform a PATCH request
Future<dynamic> patch(String url, {Map<String, String>? body, int expectedStatusCode=200}) async { Future<dynamic> patch(String url, {Map<String, String> body = const {}, int expectedStatusCode=200}) async {
var _url = makeApiUrl(url); var _url = makeApiUrl(url);
var _body = Map<String, String>(); var _body = Map<String, String>();
// Copy across provided data // Copy across provided data
if (body != null) { body.forEach((K, V) => _body[K] = V);
body.forEach((K, V) => _body[K] = V);
}
print("PATCH: " + _url); print("PATCH: " + _url);
@ -512,18 +510,18 @@ class InvenTreeAPI {
return null; return null;
}); });
if (response == null) { var responseData = await responseToJson(response);
print("null response from PATCH ${_url}");
return null;
}
if (response.statusCode != expectedStatusCode) { if (response.statusCode != expectedStatusCode) {
showStatusCodeError(response.statusCode); showStatusCodeError(response.statusCode);
print("PATCH to ${_url} returned status code ${response.statusCode}");
print("Data:");
print(responseData);
return null; return null;
} }
var responseData = await responseToJson(response);
return responseData; return responseData;
} }
@ -558,7 +556,7 @@ class InvenTreeAPI {
* Perform a HTTP POST request * Perform a HTTP POST request
* Returns a json object (or null if unsuccessful) * Returns a json object (or null if unsuccessful)
*/ */
Future<dynamic> post(String url, {Map<String, dynamic>? body, int expectedStatusCode=201}) async { Future<dynamic> post(String url, {Map<String, dynamic> body = const {}, int expectedStatusCode=201}) async {
var _url = makeApiUrl(url); var _url = makeApiUrl(url);
@ -600,10 +598,6 @@ class InvenTreeAPI {
return null; return null;
}); });
if (request == null) {
return null;
}
var data = json.encode(body); var data = json.encode(body);
// Set headers // Set headers
@ -647,13 +641,18 @@ class InvenTreeAPI {
return null; return null;
} }
var responseData = await responseToJson(response);
if (response.statusCode != expectedStatusCode) { if (response.statusCode != expectedStatusCode) {
showStatusCodeError(response.statusCode); showStatusCodeError(response.statusCode);
print("POST to ${_url} returned status code ${response.statusCode}");
print("Data:");
print(responseData);
return null; return null;
} }
var responseData = await responseToJson(response);
return responseData; return responseData;
} }
@ -690,13 +689,13 @@ class InvenTreeAPI {
* and return the Response object * and return the Response object
* (or null if the request fails) * (or null if the request fails)
*/ */
Future<HttpClientResponse?> getResponse(String url, {Map<String, String>? params}) async { Future<HttpClientResponse?> getResponse(String url, {Map<String, String> params = const {}}) async {
var _url = makeApiUrl(url); var _url = makeApiUrl(url);
print("GET: ${_url}"); print("GET: ${_url}");
// If query parameters are supplied, form a query string // If query parameters are supplied, form a query string
if (params != null && params.isNotEmpty) { if (params.isNotEmpty) {
String query = '?'; String query = '?';
params.forEach((K, V) => query += K + '=' + V + '&'); params.forEach((K, V) => query += K + '=' + V + '&');
@ -785,10 +784,6 @@ class InvenTreeAPI {
dynamic responseToJson(HttpClientResponse response) async { dynamic responseToJson(HttpClientResponse response) async {
if (response == null) {
return null;
}
String body = await response.transform(utf8.decoder).join(); String body = await response.transform(utf8.decoder).join();
try { try {
@ -813,7 +808,7 @@ class InvenTreeAPI {
* Perform a HTTP GET request * Perform a HTTP GET request
* Returns a json object (or null if did not complete) * Returns a json object (or null if did not complete)
*/ */
Future<dynamic> get(String url, {Map<String, String>? params, int expectedStatusCode=200}) async { Future<dynamic> get(String url, {Map<String, String> params = const {}, int expectedStatusCode=200}) async {
var response = await getResponse(url, params: params); var response = await getResponse(url, params: params);

View File

@ -142,11 +142,7 @@ class InvenTreeModel {
// Search this Model type in the database // Search this Model type in the database
Future<List<InvenTreeModel>> search(BuildContext context, String searchTerm, {Map<String, String>? filters}) async { Future<List<InvenTreeModel>> search(BuildContext context, String searchTerm, {Map<String, String> filters = const {}}) async {
if (filters == null) {
filters = {};
}
filters["search"] = searchTerm; filters["search"] = searchTerm;
@ -178,7 +174,7 @@ class InvenTreeModel {
} }
// POST data to update the model // POST data to update the model
Future<bool> update({Map<String, String>? values}) async { Future<bool> update({Map<String, String> values = const {}}) async {
var addr = path.join(URL, pk.toString()); var addr = path.join(URL, pk.toString());
@ -198,7 +194,7 @@ class InvenTreeModel {
} }
// Return the detail view for the associated pk // Return the detail view for the associated pk
Future<InvenTreeModel?> get(int pk, {Map<String, String>? filters}) async { Future<InvenTreeModel?> get(int pk, {Map<String, String> filters = const {}}) async {
// TODO - Add "timeout" // TODO - Add "timeout"
// TODO - Add error catching // TODO - Add error catching
@ -211,11 +207,9 @@ class InvenTreeModel {
var params = defaultGetFilters(); var params = defaultGetFilters();
if (filters != null) { // Override any default values
// Override any default values for (String key in filters.keys) {
for (String key in filters.keys) { params[key] = filters[key] ?? '';
params[key] = filters[key] ?? '';
}
} }
print("GET: $url ${params.toString()}"); print("GET: $url ${params.toString()}");
@ -250,13 +244,11 @@ class InvenTreeModel {
return createFromJson(response); return createFromJson(response);
} }
Future<InvenTreePageResponse?> listPaginated(int limit, int offset, {Map<String, String>? filters = null}) async { Future<InvenTreePageResponse?> listPaginated(int limit, int offset, {Map<String, String> filters = const {}}) async {
var params = defaultListFilters(); var params = defaultListFilters();
if (filters != null) { for (String key in filters.keys) {
for (String key in filters.keys) { params[key] = filters[key] ?? '';
params[key] = filters[key] ?? '';
}
} }
params["limit"] = "${limit}"; params["limit"] = "${limit}";
@ -288,18 +280,12 @@ class InvenTreeModel {
} }
// Return list of objects from the database, with optional filters // Return list of objects from the database, with optional filters
Future<List<InvenTreeModel>> list({Map<String, String>? filters}) async { Future<List<InvenTreeModel>> list({Map<String, String> filters = const {}}) async {
if (filters == null) {
filters = {};
}
var params = defaultListFilters(); var params = defaultListFilters();
if (filters != null) { for (String key in filters.keys) {
for (String key in filters.keys) { params[key] = filters[key] ?? '';
params[key] = filters[key] ?? '';
}
} }
print("LIST: $URL ${params.toString()}"); print("LIST: $URL ${params.toString()}");

View File

@ -27,9 +27,20 @@ class PartSearchDelegate extends SearchDelegate<InvenTreePart?> {
bool _searching = false; bool _searching = false;
// Custom filters for the part search // Custom filters for the part search
Map<String, String> filters = {}; Map<String, String> _filters = {};
PartSearchDelegate(this.context, {this.filters = const {}}); PartSearchDelegate(this.context, {Map<String, String> filters = const {}}) {
// Copy filter values
for (String key in filters.keys) {
String? value = filters[key];
if (value != null) {
_filters[key] = value;
}
}
}
@override @override
String get searchFieldLabel => L10().searchParts; String get searchFieldLabel => L10().searchParts;
@ -58,10 +69,9 @@ class PartSearchDelegate extends SearchDelegate<InvenTreePart?> {
showResults(context); 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(); partResults.clear();
@ -208,11 +218,18 @@ class StockSearchDelegate extends SearchDelegate<InvenTreeStockItem?> {
bool _searching = false; bool _searching = false;
// Custom filters for the stock item search // Custom filters for the stock item search
Map<String, String>? filters; Map<String, String> _filters = {};
StockSearchDelegate(this.context, {this.filters}) { StockSearchDelegate(this.context, {Map<String, String> filters = const {}}) {
if (filters == null) {
filters = {}; // 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<InvenTreeStockItem?> {
showResults(context); showResults(context);
// Enable cascading part search by default // Enable cascading part search by default
if (filters != null) { _filters["cascade"] = "true";
filters?["cascade"] = "true";
}
final results = await InvenTreeStockItem().search( final results = await InvenTreeStockItem().search(
context, query, filters: filters); context, query, filters: _filters);
itemResults.clear(); itemResults.clear();