delete<TModel extends RepositoryModel> method
Future<bool>
delete<TModel extends RepositoryModel>(
- TModel instance, {
- OfflineFirstDeletePolicy policy = OfflineFirstDeletePolicy.optimisticLocal,
- Query? query,
Remove a model from SQLite and the remoteProvider
Implementation
@override
Future<bool> delete<TModel extends RepositoryModel>(
TModel instance, {
OfflineFirstDeletePolicy policy = OfflineFirstDeletePolicy.optimisticLocal,
Query? query,
}) async {
final withPolicy = applyPolicyToQuery(query, delete: policy);
query = (withPolicy ?? Query()).copyWith(action: QueryAction.delete);
logger.finest('#delete: $query');
final optimisticLocal = policy == OfflineFirstDeletePolicy.optimisticLocal;
final requireRemote = policy == OfflineFirstDeletePolicy.requireRemote;
var rowsDeleted = 0;
if (optimisticLocal) {
rowsDeleted = await _deleteLocal<TModel>(instance, query: query);
await notifySubscriptionsWithLocalData<TModel>(notifyWhenEmpty: true);
}
try {
await remoteProvider.delete<TModel>(instance, query: query, repository: this);
if (requireRemote) {
rowsDeleted = await _deleteLocal<TModel>(instance, query: query);
await notifySubscriptionsWithLocalData<TModel>(notifyWhenEmpty: true);
}
} on ClientException catch (e) {
logger.warning('#delete client failure: $e');
if (requireRemote) rethrow;
} on SocketException catch (e) {
logger.warning('#delete socket failure: $e');
if (requireRemote) rethrow;
}
// ignore: unawaited_futures
if (autoHydrate) hydrate<TModel>(query: query);
return rowsDeleted > 0;
}