update method

  1. @override
bool update()
override

Recomputes getter and updates the cached value.

Returns true when the new result is not equal to the previous result according to equals or !=.

Implementation

@override
bool update() {
  if (flags & ReactiveFlags.hasChildEffect != 0) {
    var link = depsTail;
    while (link != null) {
      final prev = link.prevDep;
      final dep = link.dep;
      if (dep is BaseEffectNode) {
        unlink(link, this);
      }
      link = prev;
    }
  }

  this
    ..depsTail = null
    ..flags = ReactiveFlags.mutable | ReactiveFlags.recursedCheck;
  final prevSub = setActiveSub(this);

  try {
    ++cycle;
    final oldValue = value;
    final newValue = getter();
    final isNotEqual = switch (equals == null) {
      true => oldValue != newValue,
      false => !equals!(newValue, oldValue),
    };

    value = newValue;
    if (isNotEqual) {
      assert(() {
        JoltDevTools.set(this);
        return true;
      }());
    }

    return isNotEqual;
  } finally {
    activeSub = prevSub;
    flags &= ~ReactiveFlags.recursedCheck;
    purgeDeps(this);
  }
}