streamByQueryWithConverter method

Stream<List<T>> streamByQueryWithConverter({
  1. CollectionReferenceDef<T>? collectionReferenceQuery,
  2. required String whereDescription,
})

Streams and converts documents matching a query

Returns real-time updates with automatic conversion to T Requires _fromJson configuration

Parameters: collectionReferenceQuery custom query to filter documents whereDescription description of the query for logging

Returns Stream of List<T> containing:

  • Converted document data
  • Real-time updates

Features:

  • Custom query support
  • Automatic type conversion
  • Real-time updates
  • Error logging

Example:

final stream = api.streamByQueryWithConverter(
  collectionReferenceQuery: (ref) => ref.where('age', isGreaterThan: 18),
  whereDescription: 'Adult users',
);
stream.listen((users) {
  for (var user in users) {
    print('Adult user: ${user.name}');
  }
});

See also: streamByQuery raw data query streaming streamAllWithConverter unfiltered type-safe streaming

Implementation

Stream<List<T>> streamByQueryWithConverter({
  CollectionReferenceDef<T>? collectionReferenceQuery,
  required String whereDescription,
}) {
  final path = _collectionPath();
  _log.debug(
    message: 'Finding stream by query with converter..',
    sensitiveData: SensitiveData(
      path: path,
      whereDescription: whereDescription,
    ),
  );
  final query = collectionReferenceQuery
          ?.call(listCollectionReferenceWithConverter()) ??
      listCollectionReferenceWithConverter();
  return query
      .snapshots()
      .map(
        (event) => event.docs.map((e) => e.data()).toList(),
      )
      .handleError(
    (error, stackTrace) {
      _log.error(
        message: 'Error streaming collection by query with converter',
        sensitiveData: SensitiveData(
          path: path,
          whereDescription: whereDescription,
        ),
        error: error,
        stackTrace: stackTrace,
      );
      throw TurboFirestoreException.fromFirestoreException(
        error,
        stackTrace,
        path: path,
        query: whereDescription,
      );
    },
  );
}