callApi<T> method

  1. @override
Future<T> callApi<T>({
  1. required RouteValue routeValue,
  2. Map<String, dynamic>? body,
})
override

Implementation

@override
Future<T> callApi<T>(
    {required RouteValue routeValue, Map<String, dynamic>? body}) async {
  if (baseUrl.isEmpty) {
    throw StokedError(
        'The SDK have not been INITIALISED , Initialse the SDK first to proceed');
  }
  if (_headers['Authorization'] == null) {
    throw StokedError('AuthToken has to be set before calling API\'s');
  }
  Uri url = Uri.parse(baseUrl + routeValue.endpoint);
  late Response response;
  switch (routeValue.callType) {
    case CallType.post:
      response =
          await http.post(url, headers: _headers, body: json.encode(body));
      break;
    case CallType.get:
      response = await http.get(url, headers: _headers);
      break;
    case CallType.del:
      response = await http.delete(url, headers: _headers);
      break;
    default:
      throw StokedError('No method mentioned');
  }
  int statusCode = response.statusCode;
  if (statusCode != 200 && statusCode != 201) {
    responseError(statusCode);
  }
  final Map<String, dynamic> data = jsonDecode(response.body);
  if (data['status']?.toString().toLowerCase() == 'error') {
    throw StokedError(data['message']);
  }
  return routeValue.reponseMapper(response.body) as T;
}