updateDoc method
Future<TurboResponse<T> >
updateDoc({
- Transaction? transaction,
- required String id,
- required UpdateDocDef<
T> doc, - TWriteableId remoteUpdateRequestBuilder(
- T doc
- bool doNotifyListeners = true,
Updates a document both locally and in Firestore.
Performs an optimistic update by updating the local state first, then syncing with Firestore. If the remote update fails, the local state remains updated.
Parameters:
transaction- Optional transaction for atomic operationsid- The ID of the document to updatedoc- The definition of how to update the documentremoteUpdateRequestBuilder- Optional builder to modify the document before updatingdoNotifyListeners- Whether to notify listeners of the change
Returns a TurboResponse with the updated document reference
Implementation
@protected
Future<TurboResponse<T>> updateDoc({
Transaction? transaction,
required String id,
required UpdateDocDef<T> doc,
TWriteableId Function(T doc)? remoteUpdateRequestBuilder,
bool doNotifyListeners = true,
}) async {
try {
log.debug('Updating doc with id: $id');
final pDoc = updateLocalDoc(
id: id,
doc: doc,
doNotifyListeners: doNotifyListeners,
);
final future = api.updateDoc(
writeable:
remoteUpdateRequestBuilder?.call(pDoc) ?? pDoc as TWriteableId,
id: id,
transaction: transaction,
);
final turboResponse = await future;
if (transaction != null) {
turboResponse.throwWhenFail();
}
return turboResponse.mapSuccess((_) => pDoc);
} catch (error, stackTrace) {
if (transaction != null) rethrow;
log.error(
'$error caught while updating doc',
error: error,
stackTrace: stackTrace,
);
return TurboResponse.fail(error: error);
}
}