untracked<T> function

T untracked<T>(
  1. T fn()
)

Executes a function without tracking reactive dependencies.

When called within a reactive context (like an Effect or Computed), any reactive values accessed inside the untracked function will not be tracked as dependencies. This is useful for accessing values that should not trigger re-runs.

Parameters:

  • fn: Function to execute without dependency tracking

Returns: The result of the function execution

Example:

final count = Signal(0);
final name = Signal('Alice');

final computed = Computed(() {
  final currentCount = count.value; // Tracked dependency
  final currentName = untracked(() => name.value); // Not tracked
  return 'Count: $currentCount, Name: $currentName';
});

count.value = 1; // Triggers recomputation
name.value = 'Bob'; // Does NOT trigger recomputation

Implementation

@pragma("vm:prefer-inline")
@pragma("wasm:prefer-inline")
@pragma("dart2js:prefer-inline")
T untracked<T>(T Function() fn) {
  final prevSub = setActiveSub(null);
  try {
    return fn();
  } finally {
    setActiveSub(prevSub);
  }
}