onSnapshot method

Stream<SdbIndexRecordSnapshot<K, V, IK>?> onSnapshot(
  1. SdbDatabase db
)

Reads the data and set a listener to redo the query on changes. It only tracks changes in the current isolate/tab.

Implementation

Stream<SdbIndexRecordSnapshot<K, V, IK>?> onSnapshot(SdbDatabase db) {
  late StreamController<SdbIndexRecordSnapshot<K, V, IK>?> controller;
  void addSnapshot() {
    get(db).then((snapshot) {
      if (!controller.isClosed) {
        controller.add(snapshot);
      }
    });
  }

  FutureOr<void> onChange(
    SdbTransaction transaction,
    List<SdbRecordChange<K, V>> changes,
  ) {
    addSnapshot();
  }

  controller = StreamController<SdbIndexRecordSnapshot<K, V, IK>?>(
    onListen: () {
      addSnapshot();
      index.store.addOnChangesListener(db, onChange);
      controller.onCancel = () {
        index.store.removeOnChangesListener(db, onChange);
      };
    },
  );
  return controller.stream;
}