WatcherImpl<T> constructor
WatcherImpl<T> (
- SourcesFn<
T> sourcesFn, - WatcherFn<
T> fn, { - bool immediately = false,
- WhenFn<
T> ? when, - JoltDebugFn? onDebug,
Creates a new watcher with the given sources and callback.
Parameters:
sourcesFn: Function that returns the values to watchfn: Callback function executed when sources changeimmediately: Whether to execute the callback immediatelywhen: Optional condition function for custom trigger logic
Example:
final signal = Signal(0);
final watcher = Watcher(
() => signal.value,
(newValue, oldValue) => print('Changed: $oldValue -> $newValue'),
immediately: true,
when: (newValue, oldValue) => newValue > oldValue, // Only when increasing
);
Implementation
WatcherImpl(this.sourcesFn, this.fn,
{bool immediately = false, this.when, JoltDebugFn? onDebug})
: super(flags: ReactiveFlags.watching) {
JoltDebug.create(this, onDebug);
final prevSub = setActiveSub(this);
if (prevSub != null) {
link(this, prevSub, 0);
}
try {
prevSources = sourcesFn();
if (immediately) {
untracked(() {
final prevWatcher = Watcher.activeWatcher;
Watcher.activeWatcher = this;
try {
fn(prevSources, null);
} finally {
Watcher.activeWatcher = prevWatcher;
}
});
JoltDebug.effect(this);
}
} finally {
setActiveSub(prevSub);
}
}