ReadonlySignal#
class |
Package: package:preact_signals
Class: ReadonlySignal#
An interface for read-only signals.
A ReadonlySignal is a reactive container whose value can be read but not directly mutated.
Under the hood, any Signal implements or can be cast/exposed as a
ReadonlySignal. This
is a core architectural pattern for encapsulating state: classes can modify state internally
using a private mutable Signal, while exposing a public ReadonlySignal
to consumers to
enforce unidirectional data flow.
Whenever the underlying value changes, any active effect or computed signal that reads this signal's value will automatically be re-evaluated.
Example Usage#
import 'package:preact_signals/preact_signals.dart';
class CounterController {
// Keep the mutable state private to the controller
final _counter = signal(0);
// Expose a public read-only signal to external consumers
ReadonlySignal<int> get counter => _counter;
void increment() {
_counter.value++;
}
void decrement() {
_counter.value--;
}
}
void main() {
final controller = CounterController();
// React to updates from the read-only signal
final dispose = effect(() {
print("The current count is: ${controller.counter.value}");
});
// controller.counter.value = 10; // Error: Cannot mutate a ReadonlySignal!
controller.increment(); // Prints: "The current count is: 1"
controller.increment(); // Prints: "The current count is: 2"
dispose();
}
Members of ReadonlySignal#
| Member | Type | Signature | Description |
|---|---|---|---|
| globalId | method |
dart int globalId |
Global ID of the signal |
| value | method |
dart T value |
Compute the current value |
| name | method |
dart String? name |
The name of the signal for debugging purposes. |
| watched | method |
dart void Function()? watched |
Callback called when the signal goes from 0 to >=1 listeners. |
| unwatched | method |
dart void Function()? unwatched |
Callback called when the signal goes from >=1 to 0 listeners. |
| toString | method |
dart String toString() |
|
| toJson | method |
dart dynamic toJson() |
Convert value to JSON |
| call | method |
dart T call() |
Return the value when invoked |
| get | method |
dart T get() |
Helper method to get the current value |
| peek | method |
dart T peek() |
In the rare instance that you have an effect that should write to another signal based on the previous value, but you
don't
want the effect to be subscribed to that signal, you can read a signals's previous value via
signal.peek()
.
|
| subscribe | method |
dart void Function() subscribe(void Function(T value) fn) |
Subscribe to value changes with a dispose function |
References#
The ReadonlySignal type is referenced and used in the following pages:
- ReadonlySignal (signals_flutter/core)
- Signal (signals_flutter/core)
- ValueListenableSignalMixin (signals_flutter/mixins)
- SignalsMixin (signals_flutter/mixins)
- StreamSignalMixin (signals_flutter/mixins)
- FutureSignal (signals_flutter/async)
- AsyncSignal (signals_flutter/async)
- Stream (signals_flutter/async)
- RenderSignalProxyBox (signals_flutter/render)
- RenderSignalBox (signals_flutter/render)
- Signal Value Listenable Utils (signals_flutter/extensions)
- SignalStatefulElement (signals_flutter/extensions)
- SignalCustomPainter (signals_flutter/extensions)
- SignalElement (signals_flutter/extensions)
- Value Listenable To Signal (signals_flutter/extensions)
- signals_flutter
- SignalPainterWidget (signals_flutter/widgets)
- WatchBuilder (signals_flutter/widgets)
- Watch (signals_flutter/widgets)
- SignalBuilder (signals_flutter/widgets)
- SignalProxyWidget (signals_flutter/widgets)
- SignalAnimatedBuilder (signals_flutter/widgets)
- ReadonlySignal (signals_core/core)
- Signal (signals_core/core)
- StreamSignalMixin (signals_core/mixins)
- FutureSignal (signals_core/async)
- AsyncSignal (signals_core/async)
- Stream (signals_core/async)
- signals_core
- ReadonlySignal (signals/core)
- Signal (signals/core)
- ValueListenableSignalMixin (signals/mixins)
- SignalsMixin (signals/mixins)
- StreamSignalMixin (signals/mixins)
- FutureSignal (signals/async)
- AsyncSignal (signals/async)
- Stream (signals/async)
- RenderSignalProxyBox (signals/render)
- RenderSignalBox (signals/render)
- Signal Value Listenable Utils (signals/extensions)
- SignalStatefulElement (signals/extensions)
- SignalCustomPainter (signals/extensions)
- SignalElement (signals/extensions)
- Value Listenable To Signal (signals/extensions)
- signals
- SignalPainterWidget (signals/widgets)
- WatchBuilder (signals/widgets)
- Watch (signals/widgets)
- SignalBuilder (signals/widgets)
- SignalProxyWidget (signals/widgets)
- SignalAnimatedBuilder (signals/widgets)
- useValueListenableToSignal (signals_hooks/hooks)
- useSignalValue (signals_hooks/hooks)
- useExistingSignal (signals_hooks/hooks)
- ReadonlySignal (preact_signals/core)
- Signal (preact_signals/core)
- preact_signals