2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-06-12 10:15:32 +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
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 _body = Map<String, String>();
// 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<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);
@ -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<HttpClientResponse?> getResponse(String url, {Map<String, String>? params}) async {
Future<HttpClientResponse?> getResponse(String url, {Map<String, String> 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<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);

View File

@ -142,11 +142,7 @@ class InvenTreeModel {
// Search this Model type in the database
Future<List<InvenTreeModel>> search(BuildContext context, String searchTerm, {Map<String, String>? filters}) async {
if (filters == null) {
filters = {};
}
Future<List<InvenTreeModel>> search(BuildContext context, String searchTerm, {Map<String, String> filters = const {}}) async {
filters["search"] = searchTerm;
@ -178,7 +174,7 @@ class InvenTreeModel {
}
// 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());
@ -198,7 +194,7 @@ class InvenTreeModel {
}
// 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 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<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();
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<InvenTreeModel>> list({Map<String, String>? filters}) async {
if (filters == null) {
filters = {};
}
Future<List<InvenTreeModel>> list({Map<String, String> 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()}");

View File

@ -27,9 +27,20 @@ class PartSearchDelegate extends SearchDelegate<InvenTreePart?> {
bool _searching = false;
// 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
String get searchFieldLabel => L10().searchParts;
@ -58,10 +69,9 @@ class PartSearchDelegate extends SearchDelegate<InvenTreePart?> {
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<InvenTreeStockItem?> {
bool _searching = false;
// Custom filters for the stock item search
Map<String, String>? filters;
Map<String, String> _filters = {};
StockSearchDelegate(this.context, {this.filters}) {
if (filters == null) {
filters = {};
StockSearchDelegate(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;
}
}
}
@ -243,12 +260,10 @@ class StockSearchDelegate extends SearchDelegate<InvenTreeStockItem?> {
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();