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:
43
lib/api.dart
43
lib/api.dart
@ -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);
|
||||
|
||||
|
@ -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()}");
|
||||
|
@ -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();
|
||||
|
||||
|
Reference in New Issue
Block a user