get<N extends Node> static method

N get<N extends Node>(
  1. BuildContext context,
  2. N original
)

Resolves the given original node.

If the node is overridden in an ancestor SignalScope, returns the overridden instance. Otherwise, returns original.

Implementation

static N get<N extends Node>(BuildContext context, N original) {
  N? resolved;
  (context as Element).visitAncestorElements((ancestor) {
    final widget = ancestor.widget;
    if (widget is! SignalScope) return true;

    // Register against every traversed scope so adding an override to a
    // nearer scope also rebuilds the consumer.
    context.dependOnInheritedElement(ancestor as InheritedElement);
    final override = widget.overrides[original];
    if (override == null) return true;
    resolved = override as N;
    return false;
  });
  if (resolved != null) {
    return resolved!;
  }
  return original;
}