makeRequest method

Future<DohResponse> makeRequest({
  1. required String method,
  2. required Map<String, dynamic> request,
})

Implementation

Future<DohResponse> makeRequest(
    {required String method, required Map<String, dynamic> request}) async {
  final url = request['url'];
  final headers = request['headers'];
  final body = request['body'];
  final dohProvider = request['dohProvider'];

  final requestType =
      method.replaceAll("make", "").replaceAll("request", "").toUpperCase();

  // Run onRequest interceptors asynchronously
  await Future.wait(interceptors.map((interceptor) => _runInterceptorIsolate(
        method: 'onRequest',
        interceptor: interceptor,
        requestType: requestType,
        url: url,
        headers: headers,
        body: body,
        dohProvider: dohProvider,
      )));

  try {
    final result = await methodChannel.invokeMethod(method, request);

    final response = _returnResponse(result);

    // Run onResponse interceptors asynchronously
    await Future.wait(
        interceptors.map((interceptor) => _runInterceptorIsolate(
              method: 'onResponse',
              interceptor: interceptor,
              requestType: requestType,
              url: url,
              response: response,
            )));

    return response;
  } catch (er) {
    // Run onError interceptors asynchronously
    await Future.wait(
        interceptors.map((interceptor) => _runInterceptorIsolate(
              method: 'onError',
              interceptor: interceptor,
              requestType: requestType,
              url: url,
              error: er,
            )));
    rethrow;
  }
}