send method
- HttpRequest request
override
Sends request through Dio and returns a flattened HttpResponse.
Non-2xx responses are returned normally. Transport exceptions without a response are rethrown to the caller.
Implementation
@override
/// Sends [request] through Dio and returns a flattened [HttpResponse].
///
/// Non-2xx responses are returned normally. Transport exceptions without a
/// response are rethrown to the caller.
Future<HttpResponse> send(HttpRequest request) async {
final options = Options(
method: request.method,
headers: request.headers,
responseType: _mapResponseType(request.responseType),
validateStatus: (_) => true,
);
final data = await _mapBody(request.body);
try {
final res = await _dio.request(
request.endpoint,
queryParameters: request.query,
data: data,
options: options,
);
return HttpResponse(
statusCode: res.statusCode,
headers: res.headers.map.map((k, v) => MapEntry(k, v.join(','))),
data: res.data,
);
} on DioException catch (e) {
final res = e.response;
if (res != null) {
return HttpResponse(
statusCode: res.statusCode,
headers: res.headers.map.map((k, v) => MapEntry(k, v.join(','))),
data: res.data,
);
}
rethrow;
}
}