unlink function

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

Unlinks a dependency from a subscriber.

Parameters:

  • link: The link to unlink
  • sub: Optional subscriber node

Returns: The next dependency link, or null if none

Example:

final link = dep.subs!;
final next = unlink(link);

Implementation

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

  final dep = link.dep;
  final prevDep = link.prevDep;
  final nextDep = link.nextDep;
  final nextSub = link.nextSub;
  final prevSub = link.prevSub;
  if (nextDep != null) {
    nextDep.prevDep = prevDep;
  } else {
    sub.depsTail = prevDep;
  }
  if (prevDep != null) {
    prevDep.nextDep = nextDep;
  } else {
    sub.deps = nextDep;
  }
  if (nextSub != null) {
    nextSub.prevSub = prevSub;
  } else {
    dep.subsTail = prevSub;
  }
  if (prevSub != null) {
    prevSub.nextSub = nextSub;
  } else if ((dep.subs = nextSub) == null) {
    unwatched(dep);
  }

  JoltDebug.unlinked(dep);
  return nextDep;
}