BloomUntracked class abstract interface

The untracked raw-read accessor interface for the Bloom reactive DAG engine.

Under the Explicit Dependency Manifest architecture, reactive nodes (Bloom) are opaque DAG handles that do not expose direct value getters on their public instance surface.

BloomUntracked serves as the explicit gateway for untracked, zero-overhead raw reads outside reactive tracking scopes (or inside derivations when a dependency should intentionally not be tracked).

System Architectural Symmetry

┌──────────────────────────────────────┬──────────────────────────────────────┐
│   Tracked Access (Scoped BloomVia)    │  Untracked Access (Global Functor)   │
├──────────────────────────────────────┼──────────────────────────────────────┤
│ via(node)           (Tracks + Data)  │ untracked(node)      (No-op + Data)  │
│ via.state(node)     (Tracks + State) │ untracked.state(node)(No-op + State) │
└──────────────────────────────────────┴──────────────────────────────────────┘

Key Invariants & Architectural Benefits

  1. Zero Tracking Overhead: Reading via untracked executes a direct field dereference without querying or mutating ambient scope stacks.
  2. AI & Linter Determinism: By eliminating getter properties on Bloom, AI coding assistants and developers cannot inadvertently introduce "silent unreactivity" bugs by accessing values without explicit routing.
  3. Fail-Fast Extraction: Reading untracked on a node in Empty or Error state throws BloomSnapshotExtractionException, preserving fail-fast safety.

Examples

final counter = blooming(0);
final doubled = computed((via) => via(counter.bloom) * 2);

// 1. Imperative untracked read in tests / event handlers:
print(untracked(doubled)); // 0

// 2. Untracked state inspection:
final state = untracked.state(counter.bloom);
if (state.hasData) {
  print('Data: ${state.data}');
}

Properties

hashCode → int
The hash code for this object.
no setterinherited
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited

Methods

call<T>(Bloom<T> bloom) → T
Reads the current value of bloom untracked.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
state<T>(Bloom<T> bloom) → BloomState<T>
Returns an untracked live view of the node's 3-phase BloomState.
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited