value property
The current state of the reactive object.
Reading this property automatically registers the object as a dependency of the currently active observer (e.g., inside an LxComputed builder).
Implementation
@override
T get value {
if (_isActive) {
_ensureFresh();
return super.value;
}
// Inactive computed values evaluate on demand.
final existingProxy = Lx.proxy;
// Without active observer, capture graph only when middleware requires it.
if (existingProxy == null) {
if (!LevitReactiveMiddleware.hasGraphChangeMiddlewares) {
try {
return _compute();
} catch (_) {
rethrow;
}
}
final tracker = _DependencyTracker()
..trackReactives = LevitReactiveMiddleware.hasGraphChangeMiddlewares;
Lx.proxy = tracker;
try {
T? computationResult;
try {
computationResult = _compute();
} catch (_) {
rethrow;
}
// Publish graph changes only when dependency set was observed.
if (tracker.reactives.isNotEmpty) {
maybeNotifyGraphChange(tracker.reactives);
}
return computationResult as T;
} finally {
Lx.proxy = null;
}
}
// Active observer already captures dependencies upstream.
try {
return _compute();
} catch (_) {
rethrow;
}
}