diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart index d9ffd0ce..19389712 100644 --- a/lib/api/api_client.dart +++ b/lib/api/api_client.dart @@ -161,6 +161,35 @@ class ApiClient { } } + Future getJsonForObject(FactoryConstructor factoryConstructor, String url, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = true}) async { + var defaultHeaders = {'Accept': 'application/json'}; + if (headers != null && headers.isNotEmpty) { + defaultHeaders.addAll(headers); + } + if (!kReleaseMode) { + debugPrint("Url:$url"); + } + var response = await getJsonForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); + try { + var jsonData = jsonDecode(response.body.replaceAll(r"\'", "'")); + if (jsonData != null) { + debugPrint(jsonData.runtimeType.toString()); + return factoryConstructor(jsonData); + } else { + APIError? apiError; + apiError = APIError(response.statusCode, jsonData[0]); + throw APIException(APIException.BAD_REQUEST, error: apiError); + } + } catch (ex) { + if (ex is APIException) { + rethrow; + } else { + throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex); + } + } + } + Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { int currentRetryTime = retryTimes; if (headers == null) { @@ -206,6 +235,12 @@ class ApiClient { var queryString = Uri(queryParameters: queryParameters).query; url = '$url?$queryString'; } + + if (!kReleaseMode) { + debugPrint("Url:$url"); + debugPrint("queryParameters:$queryParameters"); + debugPrint("headers:$defaultHeaders"); + } var response = await _get(Uri.parse(url), headers: defaultHeaders).timeout(const Duration(seconds: 60)); if (response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/api/gas_refill_api_client.dart b/lib/api/gas_refill_api_client.dart index 2f84f8f8..31cc3d83 100644 --- a/lib/api/gas_refill_api_client.dart +++ b/lib/api/gas_refill_api_client.dart @@ -13,6 +13,8 @@ class GasRefillApiClient { factory GasRefillApiClient() => _instance; + // todo @majd there is a method postJsonForObject, use this, rather then postJsonForResponse + Future> getRequestPages({required List items, required int pageItemNumber}) async { final response = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.getGasRefill}", //body headers: { diff --git a/lib/views/widgets/equipment/auto_complete_devices_field.dart b/lib/views/widgets/equipment/auto_complete_devices_field.dart index 83c67756..782f8c3b 100644 --- a/lib/views/widgets/equipment/auto_complete_devices_field.dart +++ b/lib/views/widgets/equipment/auto_complete_devices_field.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/user_provider.dart'; import '../../../controllers/providers/api/devices_provider.dart'; import '../../../models/device/device.dart';