unsubscribe method

void unsubscribe(
  1. ZenithSubscriber subscriber
)

Removes subscriber from this node's listener set.

Also prunes any dead weak references encountered during removal. Safe to call on a disposed node (no-op).

Implementation

void unsubscribe(ZenithSubscriber subscriber) {
  if (_isDisposed) return;
  var current = _head;
  while (current != null) {
    final next = current.next;
    if (identical(current.subscriber.target, subscriber) ||
        current.subscriber.target == null) {
      if (current.prev != null) {
        current.prev!.next = current.next;
      } else {
        _head = current.next;
      }
      if (current.next != null) {
        current.next!.prev = current.prev;
      } else {
        _tail = current.prev;
      }
      current.linked = false;
      _subscriberCount--;
    }
    current = next;
  }
}