getSaveResponse method
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;
}