onChange method

Stream<UpdateNotification> onChange(
  1. Iterable<String>? tables, {
  2. Duration throttle = const Duration(milliseconds: 30),
  3. bool triggerImmediately = true,
})

Create a Stream of changes to any of the specified tables.

Example to get the same effect as watch:

var subscription = db.onChange({'mytable'}).asyncMap((event) async {
  var data = await db.getAll('SELECT * FROM mytable');
  return data;
}).listen((data) {
  // Do something with the data here
});

This is preferred over watch when multiple queries need to be performed together when data is changed.

Implementation

Stream<UpdateNotification> onChange(Iterable<String>? tables,
    {Duration throttle = const Duration(milliseconds: 30),
    bool triggerImmediately = true}) {
  assert(updates != null,
      'updates stream must be provided to allow query watching');
  final filteredStream = tables != null
      ? updates!.transform(UpdateNotification.filterTablesTransformer(tables))
      : updates!;
  final throttledStream = UpdateNotification.throttleStream(
      filteredStream, throttle,
      addOne: triggerImmediately ? UpdateNotification.empty() : null);
  return throttledStream;
}