patch method

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

Performs a PATCH 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> patch({
  required String url,
  required 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: 'PATCH',
    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: () =>
        _performPatch(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;
}