Dart Documentationclean_dataChangeNotificationsMixin

ChangeNotificationsMixin abstract class

abstract class ChangeNotificationsMixin {

 /**
  * Controlls notification streams. Used to propagate change events to the outside world.
  */
 StreamController<dynamic> _onChangeController;

 StreamController<Map> _onChangeSyncController =
     new StreamController.broadcast(sync: true);

 /**
  * [_change] and [_changeSync] are either of a type Change or ChangeSet depending
  * on concrete implementation of a mixin
  */
 get _change;
 get _changeSync;

 /**
  * following wanna-be-abstract methods must be overriden
  */
 void _clearChanges();
 void _clearChangesSync();
 void _onBeforeNotify() {}

 /**
  * Used to propagate change events to the outside world.
  */
  StreamController<dynamic> _onBeforeAddedController;
 StreamController<dynamic> _onBeforeRemovedController;

 /**
  * Stream populated with [DataMapView] events before any
  * data object is added.
  */
  Stream<dynamic> get onBeforeAdd {
    if(_onBeforeAddedController == null) {
      _onBeforeAddedController =
          new StreamController.broadcast(sync: true);
    }
    return _onBeforeAddedController.stream;
  }

 /**
  * Stream populated with [DataMapView] events before any
  * data object is removed.
  */
  Stream<dynamic> get onBeforeRemove {
    if(_onBeforeRemovedController == null) {
      _onBeforeRemovedController =
          new StreamController.broadcast(sync: true);
    }
    return _onBeforeRemovedController.stream;
  }



 /**
  * Stream populated with [ChangeSet] events whenever the collection or any
  * of data object contained gets changed.
  */
 Stream<ChangeSet> get onChange {
   if(_onChangeController == null) {
     _onChangeController =
         new StreamController.broadcast();
   }
   return _onChangeController.stream;
 }

 /**
  * Stream populated with {'change': [ChangeSet], 'author': [dynamic]} events
  * synchronously at the moment when the collection or any data object contained
  * gets changed.
  */
 Stream<Map> get onChangeSync => _onChangeSyncController.stream;


 /**
  * Streams all new changes marked in [_change].
  */
 void _notify({author: null}) {
   if (_changeSync != null) {
     _onChangeSyncController.add({'author': author, 'change': _changeSync});
     _clearChangesSync();
   }

   Timer.run(() {
     if (_change != null) {
       _onBeforeNotify();
       if(_onChangeController != null) _onChangeController.add(_change);
       _clearChanges();
     }
   });
 }

 void _closeChangeStreams(){
   if(_onChangeController != null) _onChangeController.close();
   _onChangeSyncController.close();
 }

}

Subclasses

ChangeChildNotificationsMixin, ChangeValueNotificationsMixin, TransformedDataBase

Properties

final Stream<dynamic> onBeforeAdd #

Stream populated with DataMapView events before any data object is added.

Stream<dynamic> get onBeforeAdd {
 if(_onBeforeAddedController == null) {
   _onBeforeAddedController =
       new StreamController.broadcast(sync: true);
 }
 return _onBeforeAddedController.stream;
}

final Stream<dynamic> onBeforeRemove #

Stream populated with DataMapView events before any data object is removed.

Stream<dynamic> get onBeforeRemove {
 if(_onBeforeRemovedController == null) {
   _onBeforeRemovedController =
       new StreamController.broadcast(sync: true);
 }
 return _onBeforeRemovedController.stream;
}

final Stream<ChangeSet> onChange #

Stream populated with ChangeSet events whenever the collection or any of data object contained gets changed.

Stream<ChangeSet> get onChange {
 if(_onChangeController == null) {
   _onChangeController =
       new StreamController.broadcast();
 }
 return _onChangeController.stream;
}

final Stream<Map> onChangeSync #

Stream populated with {'change': ChangeSet, 'author': dynamic} events synchronously at the moment when the collection or any data object contained gets changed.

Stream<Map> get onChangeSync => _onChangeSyncController.stream;