handleApiError static method

Failure handleApiError(
  1. dynamic error
)

Implementation

static Failure handleApiError(dynamic error) {
  String message = 'An unknown error occurred';
  // String? requestId;

  if (error is DioException) {
    final responseData = error.response?.data;
    final statusCode = error.response?.statusCode;

    if (responseData != null) {
      // Handle nested error.message pattern similar to JavaScript
      if (responseData is Map<String, dynamic>) {
        final errorData = responseData['error'];
        if (errorData != null && errorData is Map<String, dynamic> && errorData['message'] != null) {
          message = errorData['message'].toString();
        } else if (errorData != null) {
          message = errorData.toString();
        } else if (responseData['error_msg'] != null) {
          message = responseData['error_msg'].toString();
        } else if (responseData['message'] != null) {
          message = responseData['message'].toString();
        } else {
          message = 'Unexpected error with status: $statusCode';
        }
      } else {
        // If responseData is not a Map, convert it to string
        message = responseData.toString();
      }
      return Failure(message);
    } else {
      // Handle cases where there's no response data
      message = error.message ?? 'Network error occurred';
      if (statusCode != null) {
        message += ' (Status: $statusCode)';
      }
      return Failure(message);
    }
  }

  // Handle non-DioException errors
  if (error is Exception) {
    message = error.toString();
  } else {
    message = error?.toString() ?? 'An unknown error occurred';
  }

  return Failure(message);
}