delete method

Future<ClientResult> delete({
  1. required String url,
  2. Map<String, dynamic>? body,
  3. Map<String, String>? headers,
  4. Duration? timeout,
  5. ClientType? clientType,
  6. String? cancelKey,
  7. bool validateStatus(
    1. int?
    )?,
  8. OnSuccess? onSuccess,
  9. OnError? onError,
  10. OnHttpError? onHttpError,
  11. Map<int, OnStatus>? onStatus,
  12. Set<int>? successCodes,
  13. Set<int>? errorCodes,
})

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,
  bool Function(int?)? validateStatus,
  // 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,
      validateStatus,
    ),
  );

  _handleCallbacks(
    response: result.$1,
    error: result.$2,
    onSuccess: onSuccess,
    onError: onError,
    onHttpError: onHttpError,
    onStatus: onStatus,
    successCodes: successCodes,
    errorCodes: errorCodes,
  );

  return result;
}