delete method

Future<T?> delete(
  1. Object model, {
  2. bool remote = true,
  3. Map<String, dynamic>? params,
  4. Map<String, String>? headers,
  5. OnSuccessOne<T>? onSuccess,
  6. OnErrorOne<T>? onError,
  7. DataRequestLabel? label,
})
inherited

Deletes model of type T.

If remote is true, it will initiate an HTTP call.

Always deletes from local storage.

Arguments params and headers will be merged with defaultParams and defaultHeaders, respectively.

See also: urlForDelete, methodForDelete.

Implementation

Future<T?> delete(
  Object model, {
  bool remote = true,
  Map<String, dynamic>? params,
  Map<String, String>? headers,
  OnSuccessOne<T>? onSuccess,
  OnErrorOne<T>? onError,
  DataRequestLabel? label,
}) async {
  params = await defaultParams & params;
  headers = await defaultHeaders & headers;

  final id = _resolveId(model);
  final key = core.getKeyForModelOrId(internalType, model);

  label = DataRequestLabel('delete',
      type: internalType, id: id.toString(), withParent: label);

  if (remote == false) {
    log(label, 'deleted in local storage only');
  }
  if (key != null) {
    deleteLocalByKeys({key});
  }

  if (remote == true && id != null) {
    return await sendRequest(
      baseUrl.asUri / urlForDelete(id, params) & params,
      method: methodForDelete(id, params),
      headers: headers,
      label: label,
      onSuccess: (data, label) {
        onSuccess ??= (data, label, _) => this.onSuccess<T>(data, label);
        return onSuccess!.call(data, label, this as Adapter<T>);
      },
      onError: (e, label) async {
        onError ??= (e, label, _) => this.onError<T>(e, label);
        return onError!.call(e, label, this as Adapter<T>);
      },
    );
  }
  return null;
}