SignalsMixin<T extends StatefulWidget> mixin

A State mixin that automatically handles subscription and cleanup of signals and effects created locally within a StatefulWidget.

:::caution DEPRECATED: This mixin is deprecated. While fully supported for backward compatibility, it adds extra stateful widget lifecycle overhead and manual binding.

For superior, self-contained reactivity without mixin overhead, migrate to modern, high-performance APIs:

Legacy Usage Example

class CounterWidget extends StatefulWidget {
  const CounterWidget({super.key});

  @override
  State<CounterWidget> createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> with SignalsMixin {
  late final count = createSignal(0);
  late final doubled = createComputed(() => count.value * 2);

  @override
  void initState() {
    super.initState();
    createEffect(() {
      print('Count: ${count.value}, Doubled: ${doubled.value}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('Count: ${count.value}'),
        Text('Doubled: ${doubled.value}'),
        ElevatedButton(
          onPressed: () => count.value++,
          child: const Text('Increment'),
        ),
      ],
    );
  }
}

Modern Migration Example

// Modern alternative using SignalStatefulWidget:
class CounterWidget extends SignalStatefulWidget {
  const CounterWidget({super.key});

  @override
  State<CounterWidget> createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  final count = signal(0);
  late final doubled = computed(() => count.value * 2);

  @override
  void initState() {
    super.initState();
    // For non-widget effects, use the standard `effect` function:
    effect(() {
      print('Count: ${count.value}, Doubled: ${doubled.value}');
    });
  }

  @override
  Widget build(BuildContext context) {
    // Implicitly tracks both signals and rebuilds on change:
    return Column(
      children: [
        Text('Count: ${count.value}'),
        Text('Doubled: ${doubled.value}'),
        ElevatedButton(
          onPressed: () => count.value++,
          child: const Text('Increment'),
        ),
      ],
    );
  }
}
Superclass constraints
  1. @Deprecated('Use SignalWidget, SignalStatefulWidget, or Watch/SignalBuilder instead for superior, self-contained reactivity without stateful mixin overhead.')

Properties

context BuildContext
The location in the tree where this widget builds.
no setterinherited
hashCode int
The hash code for this object.
no setterinherited
mounted bool
Whether this State object is currently in a tree.
no setterinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
widget → T
The current configuration.
no setterinherited

Methods

activate() → void
Called when this object is reinserted into the tree after having been removed via deactivate.
inherited
bindSignal<V, S extends ReadonlySignal<V>>(S val) → S
Bind an existing signal<T> and watch for changes
build(BuildContext context) Widget
Describes the part of the user interface represented by this widget.
inherited
clearSignalsAndEffects() → void
Reset all stored signals and effects
createAsyncSignal<S>(AsyncState<S> value, {String? debugLabel}) AsyncSignal<S>
Create a signal holding an async value
createComputed<V>(V cb(), {String? debugLabel}) FlutterComputed<V>
Create a computed<T> and watch for changes
createComputedAsync<S>(Future<S> fn(), {S? initialValue, String? debugLabel, List<ReadonlySignal> dependencies = const [], bool lazy = true}) FutureSignal<S>
Async Computed is syntax sugar around FutureSignal.
createComputedFrom<S, A>(List<ReadonlySignal<A>> signals, Future<S> fn(List<A> args), {S? initialValue, String? debugLabel, bool lazy = true}) FutureSignal<S>
Async Computed is syntax sugar around FutureSignal.
createEffect(dynamic cb(), {String? debugLabel, dynamic onDispose()?}) EffectCleanup
Create a effect.
createFutureSignal<S>(Future<S> fn(), {S? initialValue, String? debugLabel, List<ReadonlySignal> dependencies = const [], bool lazy = true}) FutureSignal<S>
Create a signal from a future
createListSignal<V>(List<V> list, {String? debugLabel}) ListSignal<V>
Create a ListSignal <T> and watch for changes
createMapSignal<K, V>(Map<K, V> value, {String? debugLabel}) MapSignal<K, V>
Create a MapSignal <K, V> and watch for changes
createQueueSignal<V>(Queue<V> queue, {String? debugLabel}) QueueSignal<V>
Create a QueueSignal <T> and watch for changes
createSetSignal<V>(Set<V> set, {String? debugLabel}) SetSignal<V>
Create a SetSignal <T> and watch for changes
createSignal<V>(V val, {String? debugLabel}) FlutterSignal<V>
Create a signal<T> and watch for changes
createStreamSignal<S>(Stream<S> callback(), {S? initialValue, String? debugLabel, List<ReadonlySignal> dependencies = const [], void onDone()?, bool? cancelOnError, bool lazy = true}) StreamSignal<S>
Create a signals from a stream
deactivate() → void
Called when this object is removed from the tree.
inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
didChangeDependencies() → void
Called when a dependency of this State object changes.
inherited
didUpdateWidget(covariant T oldWidget) → void
Called whenever the widget configuration changes.
inherited
dispose() → void
Called when this object is removed from the tree permanently.
override
disposeSignal(int id) → void
Dispose and remove signal
initState() → void
Called when this object is inserted into the tree.
inherited
listenSignal(ReadonlySignal target, void callback(), {String? debugLabel}) → void
Watch signal value
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
reassemble() → void
Called whenever the application is reassembled during debugging, for example during hot reload.
inherited
setState(VoidCallback fn) → void
Notify the framework that the internal state of this object has changed.
inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringShort() String
A brief description of this object, usually just the runtimeType and the hashCode.
inherited
unbindSignal<V, S extends ReadonlySignal<V>>(S val) → S
Unbind an existing signal<T> changes
unlistenSignal(ReadonlySignal target, void callback()) → void
Stop listening to a signal value
unwatchSignal<V, S extends ReadonlySignal<V>>(S val) → V
Unwatch an existing signal<T> value changes
watchSignal<V, S extends ReadonlySignal<V>>(S val) → V
Watch signal value

Operators

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