unlink function

Link? unlink(
  1. Link link, [
  2. ReactiveNode? sub
])

Removes link from the dependency graph.

Returns the next dependency link for sub. When sub is omitted, this uses the subscriber stored on link.

Implementation

@pragma("vm:prefer-inline")
@pragma("wasm:prefer-inline")
@pragma("dart2js:prefer-inline")
Link? unlink(Link link, [ReactiveNode? sub]) {
  final actualSub = sub ?? link.sub;

  final dep = link.dep;
  assert(() {
    JoltDevTools.notifyLinkUpdate('unlink', dep, actualSub);
    return true;
  }());
  final Link(:prevDep, :nextDep, :nextSub, :prevSub) = link;
  if (nextDep != null) {
    nextDep.prevDep = prevDep;
  } else {
    actualSub.depsTail = prevDep;
  }
  if (prevDep != null) {
    prevDep.nextDep = nextDep;
  } else {
    actualSub.deps = nextDep;
  }
  if (nextSub != null) {
    nextSub.prevSub = prevSub;
  } else {
    dep.subsTail = prevSub;
  }
  if (prevSub != null) {
    prevSub.nextSub = nextSub;
  } else if ((dep.subs = nextSub) == null) {
    dep.unwatched();
  }

  return nextDep;
}