request<T> method
Make HTTP request with options.
Implementation
@override
Future<Response<T>> request<T>(
String path, {
data,
Map<String, dynamic>? queryParameters,
CancelToken? cancelToken,
Options? options,
ProgressCallback? onSendProgress,
ProgressCallback? onReceiveProgress,
}) async {
if (addCorrelationHeaders) {
final correlationHeaders =
await RequestTracker.getServerCorrelationHeaders();
final headers =
correlationHeaders.map((key, value) => MapEntry(key, value.first));
options ??= Options(headers: headers);
if (options.headers != null) {
options.headers!.addAll(headers);
} else {
options.headers = headers;
}
}
final requestTracker = await RequestTracker.create(path);
tracker = requestTracker;
return _dioClient
.request<T>(path,
data: data,
queryParameters: queryParameters,
cancelToken: cancelToken,
options: options,
onSendProgress: onSendProgress,
onReceiveProgress: onReceiveProgress)
.then((response) async {
await requestTracker.setRequestHeaders(response.requestOptions.headers
.map((k, v) => MapEntry(k, <String>[v])));
await requestTracker.setResponseStatusCode(response.statusCode ?? 404);
await requestTracker.setResponseHeaders(response.headers.map);
return response;
}, onError: (e, StackTrace stacktrace) async {
if (e is DioException) {
await requestTracker.setError(e.toString(), e.stackTrace.toString());
} else {
// All errors seem to be wrapped inside DioException, so we can't force
// coverage for another type of error, but this case will still be
// handled, just in case.
await requestTracker.setError(e.toString(), stacktrace.toString());
}
throw e;
}).whenComplete(() async {
await requestTracker.reportDone();
});
}