fromResponse static method

ServerException fromResponse(
  1. Response response
)

Implementation

static ServerException fromResponse(http.Response response) {
  List<String>? messages;
  String? code;
  String? serverStack;
  int? statusCode;
  try {
    final Map<String, dynamic> decoded = jsonDecode(response.body);
    if (decoded.containsKey("error")) {
      final Map<String, dynamic> error = decoded["error"];
      if (error.containsKey("messages")) {
        messages = List<String>.from(error["messages"]);
      } else if (error.containsKey("message")) {
        messages = [
          error["message"],
        ];
      }

      if (error.containsKey("stack")) {
        serverStack = error["stack"];
      }

      if (error.containsKey("code")) {
        code = error["code"];
      }
      statusCode = error["statusCode"] ?? response.statusCode;
    } else if (decoded.containsKey("messages")) {
      messages = List<String>.from(decoded["messages"]);
    }
    if (code == null && decoded.containsKey("errorCode")) {
      code = decoded["errorCode"];
    }
    if (serverStack == null && decoded.containsKey("stack")) {
      serverStack = decoded["stack"];
    }

    return ServerException(
      messages: messages ?? [],
      statusCode: statusCode ?? response.statusCode,
      code: code ?? response.reasonPhrase,
      serverStack: serverStack,
      original: response.body,
      request: response.request,
    );
  } catch (e) {
    // do nothing
  }
  return ServerException(
    statusCode: response.statusCode,
    serverStack: serverStack,
    code: response.reasonPhrase,
    request: response.request,
    messages: [
      response.body.isNotEmpty ? response.body : response.reasonPhrase ?? response.body,
    ],
  );
}