send method
Send an HTTP request using Dio under the hood while returning an http.Response for compatibility with existing hooks/tests.
Implementation
Future<http.Response> send(http.Request request) async {
final options = Options(
method: request.method,
headers: request.headers,
responseType: ResponseType.plain,
validateStatus: (_) => true,
);
final dioResponse = await _dio.requestUri(
request.url,
data: request.body.isNotEmpty ? request.body : null,
options: options,
);
final rawHeaders = <String, String>{};
dioResponse.headers.forEach((key, values) {
rawHeaders[key] = values.join(',');
});
final bodyString = dioResponse.data is String
? dioResponse.data as String
: jsonEncode(dioResponse.data);
return http.Response(
bodyString,
dioResponse.statusCode ?? 500,
headers: rawHeaders,
request: request,
isRedirect: dioResponse.isRedirect ?? false,
persistentConnection: true,
reasonPhrase: dioResponse.statusMessage,
);
}