save method

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

Implementation

Future<T> save(
  T model, {
  bool? remote,
  Map<String, dynamic>? params,
  Map<String, String>? headers,
  OnSuccessOne<T>? onSuccess,
  OnErrorOne<T>? onError,
  DataRequestLabel? label,
}) async {
  remote ??= _remote;

  params = await defaultParams & params;
  headers = await defaultHeaders & headers;

  // ensure model is saved
  await localAdapter.save(model._key!, model);

  label = DataRequestLabel('save',
      type: internalType,
      id: model.id?.toString(),
      model: model,
      withParent: label);

  if (remote == false) {
    log(label, 'saved in local storage only');
    return model;
  }

  final serialized = await serialize(model);
  final body = json.encode(serialized);

  final uri = baseUrl.asUri / urlForSave(model.id, params) & params;
  final method = methodForSave(model.id, params);

  final result = await sendRequest<T>(
    uri,
    method: method,
    headers: headers,
    body: body,
    label: label,
    onSuccess: (data, label) {
      onSuccess ??= (data, label, _) => this.onSuccess<T>(data, label);
      return onSuccess!.call(data, label, this as RemoteAdapter<T>);
    },
    onError: (e, label) async {
      onError ??= (e, label, _) => this.onError<T>(e, label);
      return onError!.call(e, label, this as RemoteAdapter<T>);
    },
  );
  return result ?? model;
}