request<T> method
Future<Result<T> >
request<T>(
- String path, {
- required HttpMethod method,
- Object? body,
- Map<
String, dynamic> ? queryParameters, - JsonParser<
T> ? parser, - RequestOptions? options,
override
Sends a generic HTTP request. Core verbs delegate to this method.
Implementation
@override
Future<Result<T>> request<T>(
String path, {
required HttpMethod method,
Object? body,
Map<String, dynamic>? queryParameters,
JsonParser<T>? parser,
RequestOptions? options,
}) async {
final effectiveBase = options?.baseUrl ?? _config.baseUrl;
final uri = _buildUri(effectiveBase, path, queryParameters);
final headers = _mergeHeaders(_config.defaultHeaders, options?.headers);
final timeout = options?.timeout ?? _config.timeout;
var ctx = RequestContext(
uri: uri,
method: method.value,
headers: headers,
body: body,
);
// --- request interceptors ---
final skipInterceptors = options?.skipInterceptors ?? false;
if (!skipInterceptors) {
final result = await _runRequestInterceptors(ctx);
if (result is Failure<RequestContext>) return Failure(result.error);
ctx = (result as Success<RequestContext>).data;
}
// --- execute with optional retry ---
return _executeWithRetry<T>(
ctx: ctx,
parser: parser,
timeout: timeout,
skipInterceptors: skipInterceptors,
attemptsLeft: _config.maxRetries + 1,
);
}