context_watch_signals library

Classes

AsyncData<T>
State for an AsyncState with a value
AsyncError<T>
State for an AsyncState with an error
AsyncLoading<T>
State for an AsyncState with a loading state
AsyncSignal<T>
The signal function creates a new signal. A signal is a container for a value that can change over time. You can read a signal's value or subscribe to value updates by accessing its .value property.
AsyncState<T>
AsyncState is class commonly used with Future/Stream signals to represent the states the signal can be in.
ChangeStackSignal<T>
Change stack signal that can be used to call undo/redo on a value.
Computed<T>
Data is often derived from other pieces of existing data. The computed function lets you combine the values of multiple signals into a new signal that can be reacted to, or even used by additional computeds. When the signals accessed from within a computed callback change, the computed callback is re-executed and its new return value becomes the computed signal's value.
Connect<T>
The idea for connect comes from Anguar Signals with RxJS:
FutureSignal<T>
Future signals can be created by extension or method.
IterableSignal<E>
A Signal that holds a Iterable.
ListSignal<E>
A Signal that holds a List.
LoggingSignalsObserver
Logs all signals and computed changes to the console.
MapSignal<K, V>
A Signal that holds a Map.
ReadonlySignal<T>
Read only signals can just retrieve a value but not update or cause mutations
SetSignal<E>
A Signal that holds a Set.
Signal<T>
The signal function creates a new signal. A signal is a container for a value that can change over time. You can read a signal's value or subscribe to value updates by accessing its .value property.
SignalContainer<T, Arg, S extends ReadonlySignal<T>>
Signal container used to create signals based on args
SignalContextWatcher
SignalsObserver
You can observe all signal values in the dart application by providing an implementation of SignalsObserver:
StreamSignal<T>
Stream signals can be created by extension or method.
TimerSignal
Emit recurring TimerSignalEvent aka AsyncSignal
TrackedReadonlySignal<T>
A signal tracks the previous value and the initial value
ValueSignal<T>
Signal that can be extended and used as a class
Watch<T extends Widget>
Watch

Extensions

FlutterReadonlySignalUtils on ReadonlySignal<T>
Overrides some of the signals.FlutterReadonlySignalUtils extensions to replace observing methods with context_watch-based ones.
FlutterSignalUtils on Signal<T>
Mutable signal utils
ReadonlySignalUtils on ReadonlySignal<T>
Signal extensions
SignalContextWatchExtension on ReadonlySignal<T>
SignalContextWatchValueExtension on ReadonlySignal<T>
SignalFutureUtils on Future<T>
Extension on future to provide helpful methods for signals
SignalIterableUtils on Iterable<T>
Extension on future to provide helpful methods for signals
SignalListUtils on List<T>
Extension on future to provide helpful methods for signals
SignalMapUtils on Map<K, V>
Extension on future to provide helpful methods for signals
SignalObjectUtils on T
Extension on Object to provide helpful methods for signals
SignalOptionalObjectUtils on T?
Extension on nullable Object to provide helpful methods for signals
SignalsCallbackFunctionUtils on SignalsCallbackFunction<T>
A callback function that can be used to update a signal.
SignalSetUtils on Set<T>
Extension on future to provide helpful methods for signals
SignalStreamUtils on Stream<T>
Extension on stream to provide helpful methods for signals
SignalUtils on Signal<T>
Mutable signal utils
SignalValueListenableUtils on ValueListenable<T>
Extension on ValueListenable to provide helpful methods for signals
SignalValueNotifierUtils on ValueNotifier<T>
Extension on ValueNotifier to provide helpful methods for signals
TimerSignalDurationUtils on Duration
Expose Duration as a TimerSignal

Constants

DISPOSED → const int
HAS_ERROR → const int
identifier → const Symbol
NOTIFIED → const int
OUTDATED → const int
RUNNING → const int
TRACKING → const int

Properties

globalVersion int
getter/setter pair
signalsDevToolsEnabled bool
Check if devTools is enabled
getter/setter pair

Functions

asyncSignal<T>(AsyncState<T> value, {String? debugLabel, SignalEquality<AsyncState<T>>? equality, bool autoDispose = false}) AsyncSignal<T>
The signal function creates a new signal. A signal is a container for a value that can change over time. You can read a signal's value or subscribe to value updates by accessing its .value property.
batch<T>(BatchCallback<T> callback) → T
The batch function allows you to combine multiple signal writes into one single update that is triggered at the end when the callback completes.
changeStack<T>(T value, {String? debugLabel, int? limit, bool autoDispose = false, SignalEquality<T>? equality}) ChangeStackSignal<T>
Change stack signal that can be used to call undo/redo on a value.
computed<T>(ComputedCallback<T> compute, {String? debugLabel, SignalEquality<T>? equality, bool autoDispose = false}) Computed<T>
Data is often derived from other pieces of existing data. The computed function lets you combine the values of multiple signals into a new signal that can be reacted to, or even used by additional computeds. When the signals accessed from within a computed callback change, the computed callback is re-executed and its new return value becomes the computed signal's value.
computedAsync<T>(Future<T> callback(), {T? initialValue, String? debugLabel, SignalEquality<AsyncState<T>>? equality, bool autoDispose = false, List<ReadonlySignal> dependencies = const [], bool lazy = true}) FutureSignal<T>
Async Computed is syntax sugar around FutureSignal.
computedFrom<T, A>(List<ReadonlySignal<A>> signals, Future<T> callback(List<A> args), {T? initialValue, String? debugLabel, SignalEquality<AsyncState<T>>? equality, bool autoDispose = false, bool lazy = true}) FutureSignal<T>
Async Computed is syntax sugar around FutureSignal.
connect<T>(Signal<T> signal, [Stream<T>? stream]) Connect<T>
The idea for connect comes from Anguar Signals with RxJS:
disableSignalsDevTools() → void
Disable devTools
effect(EffectCallback compute, {String? debugLabel, EffectCallback? onDispose}) EffectCleanup
The effect function is the last piece that makes everything reactive. When you access a signal inside its callback function, that signal and every dependency of said signal will be activated and subscribed to. In that regard it is very similar to computed(fn). By default all updates are lazy, so nothing will update until you access a signal inside effect.
futureSignal<T>(Future<T> callback(), {T? initialValue, String? debugLabel, List<ReadonlySignal> dependencies = const [], SignalEquality<AsyncState<T>>? equality, bool lazy = true, bool autoDispose = false}) FutureSignal<T>
Future signals can be created by extension or method.
iterableSignal<T>(Iterable<T> iterable, {String? debugLabel, bool autoDispose = false, SignalEquality<Iterable<T>>? equality}) IterableSignal<T>
Create an IterableSignal from Iterable
listenSignal<T>(BuildContext context, ReadonlySignal<T> signal, void callback(), {String? debugLabel}) → void
Used to listen for updates on a signal but not rebuild the nearest element
listSignal<T>(List<T> list, {String? debugLabel, bool autoDispose = false, SignalEquality<List<T>>? equality}) ListSignal<T>
Create an ListSignal from List
mapSignal<K, V>(Map<K, V> map, {String? debugLabel, bool autoDispose = false, SignalEquality<Map<K, V>>? equality}) MapSignal<K, V>
Create an MapSignal from Map
readonlySignal<T>(T value, {String? debugLabel, SignalEquality<T>? equality, bool autoDispose = false}) ReadonlySignal<T>
Create a read only signal
readonlySignalContainer<T, Arg>(ReadonlySignal<T> create(Arg), {bool cache = false}) SignalContainer<T, Arg, ReadonlySignal<T>>
Create a signal container used to instance signals based on args
reloadSignalsDevTools() → void
Reload the signals devTools
setSignal<T>(Set<T> list, {String? debugLabel, bool autoDispose = false, SignalEquality<Set<T>>? equality}) SetSignal<T>
Create an SetSignal from Set
signal<T>(T value, {String? debugLabel, SignalEquality<T>? equality, bool autoDispose = false}) Signal<T>
The signal function creates a new signal. A signal is a container for a value that can change over time. You can read a signal's value or subscribe to value updates by accessing its .value property.
signalContainer<T, Arg>(Signal<T> create(Arg), {bool cache = false}) SignalContainer<T, Arg, Signal<T>>
Create a signal container used to instance signals based on args
streamSignal<T>(Stream<T> callback(), {T? initialValue, String? debugLabel, List<ReadonlySignal> dependencies = const [], SignalEquality<AsyncState<T>>? equality, void onDone()?, bool? cancelOnError, bool lazy = true, bool autoDispose = false}) StreamSignal<T>
Stream signals can be created by extension or method.
timerSignal(Duration every, {String debugLabel = 'Timer', bool? cancelOnError, bool autoDispose = false, SignalEquality<AsyncState<TimerSignalEvent>>? equality}) TimerSignal
Create a TimerSignal
unlistenSignal<T>(BuildContext context, ReadonlySignal<T> signal, void callback(), {String? debugLabel}) → void
Remove all subscribers for a given signal for watchers
untracked<T>(UntrackedCallback<T> callback) → T
In case when you're receiving a callback that can read some signals, but you don't want to subscribe to them, you can use untracked to prevent any subscriptions from happening.
unwatchSignal<T>(BuildContext context, ReadonlySignal<T> signal) → void
Remove all subscribers for a given signal for watchers
valueListenableToSignal<T>(ValueListenable<T> valueListenable) ReadonlySignal<T>
ReadonlySignal from ValueListenable
valueNotifierToSignal<T>(ValueNotifier<T> valueNotifier) Signal<T>
ReadonlySignal from ValueListenable
valueSignal<T>(T value, {String? debugLabel, SignalEquality<T>? equality, bool autoDispose = false}) ValueSignal<T>
Create a value signal
watchSignal<T>(BuildContext context, ReadonlySignal<T> signal, {String? debugLabel}) → T
Watch a signal value and rebuild the context of the Element if mounted and mark it as dirty

Typedefs

AsyncDataBuilder<E, T> = E Function(T value)
Value builder for AsyncState
AsyncErrorBuilder<E> = Function
Error builder for AsyncState
AsyncStateBuilder<E> = E Function()
Generic builder for AsyncState
BatchCallback<T> = T Function()
A callback that is executed inside a batch.
ComputedCallback<T> = T Function()
A callback that is executed inside a computed.
EffectCallback = dynamic Function()
Function called when signals in the callback change
EffectCleanup = void Function()
Clean up function to stop subscriptions from updating the callback
SignalChange<T> = ({T previousValue, T value})
Signal change that contains a snapshot of the previous value and next value
SignalEquality<T> = bool Function(T previous, T value)
Check if 2 signals are the same and change when updates happen.
SignalsCallbackFunction<T> = dynamic Function(dynamic (T value))
A callback function that can be used to update a signal.
TimerSignalEvent = ({int iteration, int millis})
Time event to react to
UntrackedCallback<T> = T Function()
A callback that is executed inside a computed.

Exceptions / Errors

EffectCycleDetectionError
Cycle detection usually means you have updated a signal inside an effect and are reading by value.
MutationDetectedError
Mutation detection usually means you have updated a signal inside a computed.
SignalsError
Signal usage error
SignalsReadAfterDisposeError
SignalsWriteAfterDisposeError