get method

T get()

Returns the cached or recomputed value and links to the active subscriber.

If this node has not been evaluated yet, or if dependencies marked it dirty, getter runs before the value is returned.

Example:

final node = ComputedNode<int>(() => 1);
Effect(() => node.get());

Implementation

T get() {
  if (!isDisposed) {
    assert(() {
      JoltDevTools.get(this);
      return true;
    }());
    if (flags & ReactiveFlags.dirty != 0 ||
        (flags & ReactiveFlags.pending != 0 &&
            (checkDirty(deps!, this) ||
                () {
                  flags = flags & ~ReactiveFlags.pending;
                  return false;
                }()))) {
      if (update()) {
        if (subs != null) {
          shallowPropagate(subs!);
        }
      }
    } else if (flags == ReactiveFlags.none) {
      flags = ReactiveFlags.mutable | ReactiveFlags.recursedCheck;
      final prevSub = setActiveSub(this);
      try {
        value = getter();
        assert(() {
          JoltDevTools.set(this);
          return true;
        }());
      } finally {
        activeSub = prevSub;
        flags &= ~ReactiveFlags.recursedCheck;
      }
    }
    final sub = activeSub;
    if (sub != null) {
      link(this, sub, cycle);
    } else if (subs == null) {
      unwatched();
    }
  }

  return value as T;
}