callApi<T> method
Implementation
Future<ApiResponse<T>> callApi<T>(
String endPoint,
ApiMethod method, {
Object? body,
String? token,
Map<String, String>? additionalHeaders,
Map<String, String>? queryParams,
}) async {
Uri parsedEndpoint = Uri.parse(endPoint);
if (queryParams != null) {
parsedEndpoint = parsedEndpoint.replace(
queryParameters: {...parsedEndpoint.queryParameters, ...queryParams},
);
}
Map<String, String> headers = _defaultHeaders(token);
if (additionalHeaders != null) {
headers.addAll(additionalHeaders);
}
try {
late http.Response response;
_logger.info("Request: $method $parsedEndpoint");
_logger.info("Headers: $headers");
if (body != null) {
_logger.info("Request Body: ${jsonEncode(body)}");
}
switch (method) {
case ApiMethod.get:
response = await _secureClient.get(parsedEndpoint, headers: headers);
break;
case ApiMethod.post:
response = await _secureClient.post(
parsedEndpoint,
body: jsonEncode(body),
headers: headers,
);
break;
case ApiMethod.put:
response = await _secureClient.put(
parsedEndpoint,
body: jsonEncode(body),
headers: headers,
);
break;
case ApiMethod.patch:
response = await _secureClient.patch(
parsedEndpoint,
body: jsonEncode(body),
headers: headers,
);
break;
case ApiMethod.delete:
response = await _secureClient.delete(
parsedEndpoint,
body: jsonEncode(body),
headers: headers,
);
break;
}
_logger.info("Response Status: ${response.statusCode}");
_logger.info("Response Body: ${response.body}");
var decoded = customJsonDecode<T>(response);
return ApiResponse.fromJson(decoded, response.statusCode);
} catch (err) {
_logger.severe("API call failed: $err");
return ApiResponse(data: err.toString() as T);
}
}