sendRequest<R> method

  1. @override
  2. @protected
FutureOr<R?> sendRequest<R>(
  1. Uri uri, {
  2. DataRequestMethod method = DataRequestMethod.GET,
  3. Map<String, String>? headers,
  4. bool omitDefaultParams = false,
  5. dynamic requestType = DataRequestType.adhoc,
  6. String? key,
  7. String? body,
  8. dynamic onSuccess,
  9. dynamic onError,
})

The function used to perform an HTTP request and return an R.

IMPORTANT:

  • uri takes the FULL Uri including query parameters
  • headers 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,
  );
}