execute method
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,
);
}