onSnapshot method
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;
}