deleteDocument<T> method

Future<void> deleteDocument<T>(
  1. DocumentReference<T> ref, {
  2. DeletePolicy deletePolicy = DeletePolicy.serverFirst,
})

Implementation

Future<void> deleteDocument<T>(
  DocumentReference<T> ref, {
  DeletePolicy deletePolicy = DeletePolicy.serverFirst,
}) async {
  switch (deletePolicy) {
    case DeletePolicy.serverFirst:
      final snap =
          await getDocument(ref, fetchPolicy: GetFetchPolicy.cacheOnly);
      await ref.delete();
      _updateFromSnap(snap.withValue(null));
      break;
    case DeletePolicy.cacheOnly:
      final snap =
          await getDocument(ref, fetchPolicy: GetFetchPolicy.cacheOnly);
      _updateFromSnap(snap.withValue(null));
      break;
    case DeletePolicy.cacheAndServer:
      final snap =
          await getDocument(ref, fetchPolicy: GetFetchPolicy.cacheOnly);
      _updateFromSnap(snap.withValue(null), isOptimistic: true);
      try {
        await ref.delete();
      } catch (e) {
        _rollbackOptimisticUpdate(snap);
        rethrow;
      }
  }
}