ApiResponse.fromResponse constructor

ApiResponse.fromResponse(
  1. Response response
)

Factory method to create an ApiResponse from an HTTP response object.

Implementation

factory ApiResponse.fromResponse(Response response) {
  int code = response.statusCode;
  dynamic body = jsonDecode(response.body);
  List errors = [];
  String message = "";

  switch (code) {
    case 200:
    case 201:
      try {
        message = body is Map ? body['message'] ?? "" : "";
      } catch (error) {
        // Handle any error in reading message
        message = "";
      }
      break;
    case 400:
      try {
        message = body is Map ? body['errors'][0]['message'] ?? "" : "";
        errors.add(message);
      } catch (error) {
        message = body is Map ? body['message'] ?? "" : "";
        errors.add(message);
      }
      break;
    case 401:
      try {
        message = body is Map ? body['message'] ?? "Unauthorized" : "Unauthorized";
        errors.add(message);
      } catch (error) {
        errors.add("Unauthorized");
      }
      break;
    case 408:
      message = "Server timeout, please try again later.";
      errors.add(message);
      break;
    case 429:
      try {
        message = body is Map ? body['message'] ?? "Too many requests" : "Too many requests";
        errors.add(message);
      } catch (error) {
        errors.add("Too many requests");
      }
      break;
    default:
      message = body is Map ? body["message"] ?? "Something went wrong." : "Something went wrong.";
      break;
  }

  return ApiResponse(
    code: code,
    message: message,
    body: body,
    errors: errors,
  );
}