execute method

  1. @override
Future<Response<T>> execute()
override

Executes this request and returns Response value

Implementation

@override
Future<Response<T>> execute() async {
  if (baseUrl?.isEmpty ?? true) {
    throw IllegalArgumentException(message: 'Base url not set');
  }

  if (url?.isEmpty ?? true) {
    throw IllegalArgumentException(message: 'Path url not set');
  }

  requestCollection.addRequest(this);

  unawaited(getFromDatabase());

  final simulationResult = await simulateResultStep();

  if (simulationResult != null) {
    return simulationResult;
  }

  if (simulateResponse != null) {
    requestCollection.removeRequest(this);

    return _simulateServerResponse();
  }

  final client = _dio;

  dynamic data;

  if (formData != null) {
    data = await formData;
  } else {
    data = body is Map || body is List ? jsonEncode(body) : body;
  }

  if (cancelToken.isCancelled) {
    if (requestCollection.cancelReasonProcessingCompleter != null) {
      await RequestCollection
          .instance.cancelReasonProcessingCompleter!.future;
    }
  }

  final response = simulateResponse ?? (await _startRequest(client, data));

  if (response == null || forceReturnNullFromRequest) {
    requestCollection.removeRequest(this);

    return processNoResponse();
  }

  if (response is dio.DioException) {
    requestCollection.removeRequest(this);

    return processDioException(response, client, data);
  }

  dynamic result;

  final responseBody = response as dio.Response;

  if (parser == null) {
    result = responseBody.data;
  } else {
    try {
      result = await parser!(responseBody.data, responseBody.headers.map);
    } catch (e, trace) {
      defaultSettings.exceptionPrint(e, trace);

      requestCollection.removeRequest(this);

      return Response<T>(
        code: 0,
        error: NotRecognizedHttpException(message: 'Unknown error'),
      );
    }
  }

  if (result != null) {
    try {
      await databasePutDelegate?.call(result);
    } catch (e, trace) {
      defaultSettings.exceptionPrint(e, trace);
    }
  }

  requestCollection.removeRequest(this);

  return Response<T>(
    code: responseBody.statusCode ?? 0,
    headers: responseBody.headers.map,
    result: result,
  );
}