post method
Future<ClientResult>
post({
- required String url,
- required Map<
String, dynamic> body, - Map<
String, String> ? headers, - Duration? timeout,
- ClientType? clientType,
- String? cancelKey,
- bool validateStatus(
- int?
- Set<
int> ? autoRedirectStatusCodes, - OnSuccess? onSuccess,
- OnError? onError,
- OnHttpError? onHttpError,
- Map<
int, OnStatus> ? onStatus, - Set<
int> ? successCodes, - Set<
int> ? errorCodes,
Performs a POST 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> post({
required String url,
required Map<String, dynamic> body,
Map<String, String>? headers,
Duration? timeout,
ClientType? clientType,
String? cancelKey,
bool Function(int?)? validateStatus,
Set<int>? autoRedirectStatusCodes,
// 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: 'POST',
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: () => _performPost(
processedRequest,
timeout,
clientType,
cancelKey,
validateStatus,
autoRedirectStatusCodes,
),
);
_handleCallbacks(
response: result.$1,
error: result.$2,
onSuccess: onSuccess,
onError: onError,
onHttpError: onHttpError,
onStatus: onStatus,
successCodes: successCodes,
errorCodes: errorCodes,
);
return result;
}