findDocRef method

DocumentReference<Map<String, dynamic>> findDocRef({
  1. required String id,
  2. String? collectionPathOverride,
})

Finds a DocumentReference of type Map<String, dynamic> based on given id.

If _tryAddLocalId is true then your data will also contain a local id field based on the _idFieldName specified in the constructor. Add this id field to your T and you will have easy access to the document id at any time.

If _tryAddLocalDocumentReference is true then your data will also contain a local reference field based on the _documentReferenceFieldName specified in the constructor. Add this reference field to your T and you will have easy access to the document reference at any time.

If you rather want to retrieve data in the form of T consider using the findDocRefWithConverter method instead.

Implementation

DocumentReference<Map<String, dynamic>> findDocRef({
  required String id,
  String? collectionPathOverride,
}) {
  assert(
    _isCollectionGroup == (collectionPathOverride != null),
    'Firestore does not support finding a document by id when communicating with a collection group, '
    'therefore, you must specify the collectionPathOverride containing all parent collection and document ids '
    'in order to make this method work.',
  );
  _log.info(
      '🔥 Finding ${collectionPathOverride ?? _collectionPath()} DocumentReference without converter and id: $id..');
  return _firebaseFirestore
      .doc('${collectionPathOverride ?? _collectionPath()}/$id')
      .withConverter<Map<String, dynamic>>(
    fromFirestore: (snapshot, _) {
      final data = snapshot.data() ?? {};
      try {
        return data
            .tryAddLocalId(
              snapshot.id,
              idFieldName: _idFieldName,
              tryAddLocalId: _tryAddLocalId,
            )
            .tryAddLocalDocumentReference(
              snapshot.reference,
              referenceFieldName: _documentReferenceFieldName,
              tryAddLocalDocumentReference: _tryAddLocalDocumentReference,
            );
      } catch (error) {
        _log.error(
          '🔥 Unexpected ${error.runtimeType} caught while serializing ${_collectionPath()} '
          'with id: ${snapshot.id} and '
          'data: $data',
        );
        rethrow;
      }
    },
    toFirestore: (data, _) {
      try {
        return data
            .tryRemoveLocalId(
              idFieldName: _idFieldName,
              tryRemoveLocalId: _tryAddLocalId,
            )
            .tryRemoveLocalDocumentReference(
              referenceFieldName: _documentReferenceFieldName,
              tryRemoveLocalDocumentReference: _tryAddLocalDocumentReference,
            );
      } catch (error) {
        _log.error(
          '🔥 Unexpected ${error.runtimeType} caught while deserializing ${_collectionPath()} and '
          'data: $data',
        );
        rethrow;
      }
    },
  );
}