getSaveResponse method

Future<EResponse> getSaveResponse(
  1. Future futureResponse
)
inherited

Implementation

Future<EResponse> getSaveResponse(Future futureResponse) async {
  EResponse response = EResponse(
    http.Response('', HttpStatus.notFound),
    null,
  );

  EResponse chopperResponseToCustomHttpResponse(chopper.Response response) =>
      EResponse(
        response.base,
        response.body,
        error: response.error,
        extraData: response,
      );

  EResponse retrofitHttpResponseToCustomHttpResponse(retrofit.HttpResponse response) =>
      EResponse(
          http.Response(
            '',
            response.response.statusCode ?? HttpStatus.notFound,
            headers: response.response.headers.map.map((key, value) => MapEntry(key, value.join('; '))),
            isRedirect: response.response.isRedirect ?? false,
            request: http.Request(
              response.response.requestOptions.method,
              response.response.requestOptions.uri,
            ),
          ),
          response.data,
          error: response.response.data,
          extraData: response
      );

  EResponse dioErrorToCustomHttpResponse(dio.DioError error) =>
      EResponse(
          http.Response(
            '',
            error.response?.statusCode ?? HttpStatus.notFound,
            headers: error.response?.headers.map.map((key, value) => MapEntry(key, value.join('; '))) ?? {},
            isRedirect: error.response?.isRedirect ?? false,
            request: http.Request(
              error.response?.requestOptions.method ?? HttpMethod.GET,
              error.response?.requestOptions.uri ?? Uri(),
            ),
          ),
          null,
          error: error.response?.data ?? ErrorResponse(
            message: error.message,
          ),
          extraData: error
      );

  try {
    if(futureResponse is Future<chopper.Response>) {
      final chopper.Response chopperResponse = await futureResponse;
      response = chopperResponseToCustomHttpResponse(chopperResponse);
    } else
    if(futureResponse is Future<retrofit.HttpResponse>) {
      final retrofit.HttpResponse retrofitHttpResponse = await futureResponse;
      response = retrofitHttpResponseToCustomHttpResponse(retrofitHttpResponse);
    }
  } catch (e) {
    if (e is chopper.Response) {
      response = chopperResponseToCustomHttpResponse(e);
    } else
    if (e is retrofit.HttpResponse) {
      response = retrofitHttpResponseToCustomHttpResponse(e);
    } else
    if (e is dio.DioError) {
      switch(e.type) {
        case dio.DioErrorType.connectTimeout:
        case dio.DioErrorType.receiveTimeout:
        case dio.DioErrorType.sendTimeout:
          throw TimeoutException(e.message);
        default:
      }
      if(e.error is Exception) throw e.error;
      response = dioErrorToCustomHttpResponse(e);
    } else {
      rethrow;
    }
  }
  return response;
}