value property

T get value

Implementation

T get value => _value;
set value (T newValue)

Updates the value and notifies listeners if the value has changed.

Implementation

set value(T newValue) {
  T oldValue = _value;
  if (newValue != oldValue) {
    for (var middleware in _middlewares) {
      middleware.beforeUpdate(oldValue, newValue);
    }

    _value = newValue;
    for (var middleware in _middlewares) {
      middleware.afterUpdate(oldValue, newValue);
    }

    bool shouldPublish = _middlewares
        .map((e) => e.shouldEmit(oldValue, newValue))
        .fold(true, (value, element) => value && element);

    if (shouldPublish) {
      Snapshot<T> snapshot = Snapshot(oldValue, newValue);
      if (_isBatchUpdate) {
        _bufferedEvents.add(snapshot);
      } else {
        _controller.add(snapshot);
      }
    }
  }
}