send method Null safety
- BaseRequest request
override
Sends an HTTP request and asynchronously returns the response.
Implementers should call BaseRequest.finalize to get the body of the request as a ByteStream. They shouldn't make any assumptions about the state of the stream; it could have data written to it asynchronously at a later point, or it could already be closed when it's returned. Any internal HTTP errors should be wrapped as ClientExceptions.
Implementation
@override
Future<http.StreamedResponse> send(http.BaseRequest request) async {
if (addCorrelationHeaders) {
final correlationHeaders =
await RequestTracker.getServerCorrelationHeaders();
request.headers.addAll(correlationHeaders);
}
final urlString = request.url.toString();
tracker = await RequestTracker.create(urlString);
return _httpClient.send(request).then((response) async {
final headers = response.request?.headers ?? request.headers;
await tracker!.setRequestHeaders(headers);
await tracker!.setResponseStatusCode(response.statusCode);
await tracker!.setResponseHeaders(response.headers);
return response;
}, onError: (e, StackTrace stacktrace) async {
await tracker!.setError(e.toString(), stacktrace.toString());
throw e;
}).whenComplete(() async {
await tracker!.reportDone();
});
}