delete method
Performs a DELETE request and returns the result as a tuple.
Optionally accepts callbacks for convenient response handling. When callbacks are provided, they are invoked based on the response status code, but the result tuple is still returned.
Implementation
Future<ClientResult> delete({
required String url,
Map<String, dynamic>? body,
Map<String, String>? headers,
Duration? timeout,
ClientType? clientType,
String? cancelKey,
// Optional callbacks
OnSuccess? onSuccess,
OnError? onError,
OnHttpError? onHttpError,
Map<int, OnStatus>? onStatus,
Set<int>? successCodes,
Set<int>? errorCodes,
}) async {
final fullUrl = _buildUrl(url);
final request = ClientRequest(
url: fullUrl,
method: 'DELETE',
headers: {...config.defaultHeaders, ...?headers},
body: body,
);
final processedRequest = await _runRequestInterceptors(request);
if (processedRequest == null) {
final result = (
null,
ClientException(
message: 'Request cancelled by interceptor', url: fullUrl)
);
_handleCallbacks(
response: result.$1,
error: result.$2,
onSuccess: onSuccess,
onError: onError,
onHttpError: onHttpError,
onStatus: onStatus,
successCodes: successCodes,
errorCodes: errorCodes,
);
return result;
}
final result = await _executeWithRetry(
request: processedRequest,
execute: () =>
_performDelete(processedRequest, timeout, clientType, cancelKey),
);
_handleCallbacks(
response: result.$1,
error: result.$2,
onSuccess: onSuccess,
onError: onError,
onHttpError: onHttpError,
onStatus: onStatus,
successCodes: successCodes,
errorCodes: errorCodes,
);
return result;
}