ResponseModal<T>.fromDioResponse constructor

ResponseModal<T>.fromDioResponse(
  1. Response response
)

Factory for Dio Response

Implementation

factory ResponseModal.fromDioResponse(Response response) {
  Map jsonResponse = {};

  try {
    if (response.data is Map) {
      jsonResponse = response.data;
    } else if (response.data is String) {
      jsonResponse = convert.jsonDecode(response.data);
    } else {
      jsonResponse = {'message': 'Unexpected response format'};
    }
  } catch (e) {
    jsonResponse['message'] = 'Internal Server Error';
    jsonResponse['error'] = response.data ?? e.toString();
  }

  try {
    if (jsonResponse['message'] == 'Validation failed') {
      jsonResponse['error'] = jsonResponse['error'] ?? jsonResponse['errors'];
      jsonResponse['message'] = '';
      List<String> errors = [];
      (jsonResponse['error'] as Map).forEach((key, value) {
        for (var element in (value as List)) {
          errors.add(element.toString());
        }
      });
      jsonResponse['message'] = errors.join('\n');
    }
  } catch (e) {
    print('Error in catch block...$e');
  }

  switch (response.statusCode) {
    case 200:
    case 201:
      return ResponseModal(
        status: jsonResponse['status'] ?? 0,
        message: jsonResponse['message'] ?? 'static message',
        error: jsonResponse['error'] ??
            jsonResponse['errors'] ??
            {'error': 'static error'},
        data: jsonResponse['data'] ?? jsonResponse,
        fullData: jsonResponse,
      );

    case 400:
      return ResponseModal(
        status: jsonResponse['status'] ?? 0,
        message: jsonResponse['message'] ?? 'Bad Request',
        error: jsonResponse['error'] ??
            jsonResponse['errors'] ??
            {'error': 'static error'},
        data: jsonResponse['data'] ?? jsonResponse,
        fullData: jsonResponse,
      );

    case 401:
      return ResponseModal(
        status: 0,
        message:
        jsonResponse['message'] ?? 'Auth token invalid app end message',
        error: jsonResponse['error'] ?? jsonResponse['errors'] ?? {},
        data: jsonResponse['data'] ?? jsonResponse,
        fullData: jsonResponse,
      );

    case 500:
      try {
        return ResponseModal(
          status: 0,
          message:
          jsonResponse['message'] ?? 'Internal server error message',
          error: jsonResponse['error'] ?? jsonResponse['errors'] ?? {},
          data: jsonResponse['data'] ?? jsonResponse,
          fullData: jsonResponse,
        );
      } catch (e) {
        return ResponseModal(
          status: 0,
          message: jsonResponse.toString(),
          error: jsonResponse['error'] ?? jsonResponse['errors'] ?? {},
          data: jsonResponse['data'] ?? jsonResponse,
          fullData: jsonResponse,
        );
      }

    default:
      return ResponseModal(
        status: 0,
        message: jsonResponse['message'] ??
            'Default message ${response.statusCode}',
        error: jsonResponse['error'] ?? jsonResponse['errors'] ?? {},
        data: jsonResponse['data'] ?? jsonResponse,
        fullData: jsonResponse,
      );
  }
}