watchItems<T extends StorableModel> method

Future<Stream<List<T>>> watchItems<T extends StorableModel>(
  1. String tag,
  2. T fromJson(
    1. Map<String, dynamic>
    )
)

Watches for changes in the data store associated with a specific tag and provides a stream of items of type T.

This method loads the initial data corresponding to the provided tag, adds it to the stream controller, and returns a Stream that emits a list of objects of type T whenever data changes. The transformation is done by converting each entry from a Map<String, dynamic> using the provided fromJson function.

Type Parameters:

  • T: A type extending StorableModel that represents the model of the data.

Parameters:

  • tag: A String representing the category or group of data to monitor.
  • fromJson: A function that converts a Map<String, dynamic> to an object of type T.

Returns:

  • A Future<Stream<List<T>>> that emits updated lists of items of type T.

Throws:

  • Any errors encountered during the initial data load will propagate.

Implementation

Future<Stream<List<T>>> watchItems<T extends StorableModel>(
  final String tag,
  final T Function(Map<String, dynamic>) fromJson,
) async {
  // Initial load
  await _loadData(tag).then((final Map<String, dynamic> data) {
    _getController(tag).add(data);
  });

  return _getController(tag).stream.map(
    (final Map<String, dynamic> data) =>
        data.values
            .map(
              (final dynamic item) => fromJson(item as Map<String, dynamic>),
            )
            .toList(),
  );
}