sendRequest<R> method
The function used to perform an HTTP request and return an R
.
IMPORTANT:
uri
takes the FULLUri
including query parametersheaders
does NOT include ANY defaults such as defaultHeaders (unless you omit the argument, in which case defaults will be included)
Example:
await sendRequest(
baseUrl.asUri + 'token' & await defaultParams & {'a': 1},
headers: await defaultHeaders & {'a': 'b'},
onSuccess: (data) => data['token'] as String,
);
ignore: comment_references
To build the URI you can use String.asUri
, Uri.+
and Uri.&
.
To merge headers and params with their defaults you can use the helper
Map<String, dynamic>.&
.
In addition, onSuccess
is supplied to post-process the
data in JSON format. Deserialization and initialization
typically occur in this function.
onError
can also be supplied to override _RemoteAdapter.onError
.
Implementation
@override
@protected
FutureOr<R?> sendRequest<R>(
Uri uri, {
DataRequestMethod method = DataRequestMethod.GET,
Map<String, String>? headers,
bool omitDefaultParams = false,
DataRequestType requestType = DataRequestType.adhoc,
String? key,
String? body,
OnData<R>? onSuccess,
OnDataError<R>? onError,
}) {
Uri? actualUri;
OnData<R>? actualOnSuccess;
String? actualBody;
switch (requestType) {
case DataRequestType.findAll:
assert(onSuccess != null);
actualUri = _uriWithDefaultQuery(uri);
actualOnSuccess = _transformAllOnSuccess(onSuccess!);
break;
case DataRequestType.findOne:
assert(onSuccess != null);
actualUri = _uriWithDefaultQuery(uri);
actualOnSuccess = _transformOneOnSuccess(onSuccess!, uri);
break;
case DataRequestType.save:
assert(onSuccess != null);
assert(body != null);
if (method == DataRequestMethod.POST) {
actualOnSuccess = _transformPostOnSuccess(onSuccess!, body!);
} else {
actualBody = _bodyWithoutId(body!);
actualOnSuccess = _transformOneOnSuccess(onSuccess!, uri);
}
break;
case DataRequestType.delete:
case DataRequestType.adhoc:
break;
}
return super.sendRequest(
actualUri ?? uri,
method: method,
headers: headers,
omitDefaultParams: omitDefaultParams,
requestType: requestType,
key: key,
body: actualBody ?? body,
onSuccess: actualOnSuccess ?? onSuccess,
onError: onError,
);
}