DataReference class
Observable object, which represents single primitive in Data.
class DataReference extends Object with ChangeNotificationsMixin, ChangeValueNotificationsMixin{ /** * Encapsulated value */ dynamic _value; StreamSubscription _onDataChangeListener, _onDataChangeSyncListener; /** * Return value of a primitive type. */ get value => _value; /** * Change value of primitive type and notify listeners. */ set value(newValue) { changeValue(newValue); } _silentChangeValue(newValue){ assert(newValue is! DataReference); _value = newValue; if(_onDataChangeListener != null) { _onDataChangeListener.cancel(); _onDataChangeListener = null; } if(_onDataChangeSyncListener != null) { _onDataChangeSyncListener.cancel(); _onDataChangeSyncListener = null; } if(newValue is ChangeNotificationsMixin) { _onDataChangeSyncListener = newValue.onChangeSync.listen((changeEvent) { _onChangeSyncController.add(changeEvent); }); _onDataChangeListener = newValue.onChange.listen((changeEvent) { // due to its lazy initialization, _onChangeController does not need to // exist; if not ignore the change, no one is listening! if (_onChangeController != null) { _onChangeController.add(changeEvent); } }); } } changeValue(newValue, {author: null}) { _markChanged(this._value, newValue); _silentChangeValue(newValue); _notify(author: author); } /** * Creates new DataReference with [value] */ DataReference(value) { _silentChangeValue(value); _clearChanges(); _clearChangesSync(); } void dispose() { _dispose(); if (_onDataChangeListener != null) { _onDataChangeListener.cancel(); } if (_onDataChangeSyncListener != null) { _onDataChangeSyncListener.cancel(); } } String toString() => 'Ref(${_value.toString()})'; }
Mixins
ChangeNotificationsMixin, ChangeValueNotificationsMixin
Constructors
new DataReference(value) #
Creates new DataReference with value
DataReference(value) { _silentChangeValue(value); _clearChanges(); _clearChangesSync(); }
Properties
final Stream<dynamic> onBeforeAdd #
mixed in from ChangeNotificationsMixin
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 #
mixed in from ChangeNotificationsMixin
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 #
mixed in from ChangeNotificationsMixin
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 #
mixed in from ChangeNotificationsMixin
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;
dynamic get value #
Return value of a primitive type.
get value => _value;
dynamic set value(newValue) #
Change value of primitive type and notify listeners.
set value(newValue) { changeValue(newValue); }
Methods
dynamic changeValue(newValue, {author: null}) #
changeValue(newValue, {author: null}) { _markChanged(this._value, newValue); _silentChangeValue(newValue); _notify(author: author); }
void dispose() #
void dispose() { _dispose(); if (_onDataChangeListener != null) { _onDataChangeListener.cancel(); } if (_onDataChangeSyncListener != null) { _onDataChangeSyncListener.cancel(); } }