handleStatusCode method

Never handleStatusCode(
  1. Response response
)

Internal method to handle status codes

Implementation

Never handleStatusCode(http.Response response) {
  String? message = '';
  List<Map<String, String>>? errors;
  if (response.headers['content-type']!.contains('application/json')) {
    try {
      final json = jsonDecode(response.body);
      message = json['message'];
      if (json['errors'] != null) {
        try {
          errors = List<Map<String, String>>.from(json['errors']);
        } catch (_) {
          errors = [
            {'code': json['errors'].toString()}
          ];
        }
      }
    } catch (ex) {
      throw UnknownError(this, ex.toString());
    }
  }
  switch (response.statusCode) {
    case 404:
      throw NotFound(this, 'Requested Resource was Not Found');
    case 401:
      throw AccessForbidden(this);
    case 400:
      if (message == 'Problems parsing JSON') {
        throw InvalidJSON(this, message);
      } else if (message == 'Body should be a JSON Hash') {
        throw InvalidJSON(this, message);
      } else {
        throw BadRequest(this);
      }
    case 422:
      final buff = StringBuffer();
      buff.writeln();
      buff.writeln('  Message: $message');
      if (errors != null) {
        buff.writeln('  Errors:');
        for (final error in errors) {
          final resource = error['resource'];
          final field = error['field'];
          final code = error['code'];
          buff
            ..writeln('    Resource: $resource')
            ..writeln('    Field $field')
            ..write('    Code: $code');
        }
      }
      throw ValidationFailed(this, buff.toString());
    case 500:
    case 502:
    case 504:
      throw ServerError(this, response.statusCode, message);
  }
  throw UnknownError(this, message);
}