signals_flutter
The signals library exposes four core functions which are the building blocks to model any business logic you can think of.
7.1.0
28K downloads/mo
#1910 most downloaded on pub.dev
rodydavis/signals.dart
What this package is like to depend on
Last release 2 months ago
29 May 2026
Ships unpredictably
gaps range from 8 days to 10 months
Nearly every release is documented
notes for 41 of 41 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
61 releases · first in 2023
6 releases in the last 12 months
see the full history below
Release timeline
61 releases · Dec 2023 to May 2026Releases
latest 60 of 61-
7.1.029 May 2026Release notes
Open source →What's Changed
- chore(deps): bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #468
- chore(deps): bump codecov/codecov-action from 3 to 6 by @dependabot[bot] in #471
- chore(deps): bump actions/checkout from 3 to 6 by @dependabot[bot] in #470
- chore(deps): bump dart-lang/setup-dart from 1.5.0 to 1.7.2 by @dependabot[bot] in #472
- feat(signals): Add toString() to SignalEffectException by @achtsamkeitundmeer in #445
New Contributors
- @dependabot[bot] made their first contribution in #468
- @achtsamkeitundmeer made their first contribution in #445
Full Changelog: v7.0.0...v7.1.0
Release notes
Open source →🚀 New Features
- Decoupled & Generalized
SignalProvider: DecoupledSignalProviderfromFlutterReadonlySignal(which implementsListenable) and generalized it to accept any standard coreReadonlySignalfromsignals_core. - Automatic Listenable Adapter Conversion: Standard signals that do not implement
Listenableare automatically wrapped in a lightweight, lifecycle-managedListenableadapter internally underInheritedNotifier, maintaining maximum efficiency without manual boilerplate.
🐛 Bug Fixes
- Dependency Injection Guide: Fixed primitive type compile errors and generic alignment inside
docs/content/guides/dependency-injection.md.
-
7.0.026 May 2026Release notes
Open source →What's Changed
- Update event-sink.md by @Koichi5 in #367
- Fix docs by @hyshu in #368
- add signals_hooks by @rodydavis in #370
- bump flutter_hooks version by @rodydavis in #371
- MVI example by @devfelipereis in #369
- docs: Fix computedFrom example in async computed documentation by @dorklein in #375
- Add llms.txt file by @jaydanurwin in #392
- Add
debugLabelto hooks by @dickermoshe in #412 - docs(website): add documentation for signals_hooks by @rodydavis in #414
- docs(website): add documentation for signals_hooks by @rodydavis in #415
- fix: use identityHashCode for context by @zupat in #424
- feat(signals_flutter): return FlutterSignal/-Computed from SignalsMixin.createSignal/-Computed by @Yegair in #422
- Fix
ValueListenable.toSignal()not removing listener on dispose by @google-labs-jules[bot] in #425 - Fix Signal Container Loop by @google-labs-jules[bot] in #427
- fix: only notify when the collection was modified. by @zupat in #435
- Refactor: Rename persisted signal classes to correct typo by @halifox in #432
- fix(flutter): prevent ConcurrentModificationError in SignalsMixin by @DavidPluxia in #436
- Fix: call super.dispose in SignalHookState by @zupat in #437
- Signals Version 7 by @rodydavis in #467
New Contributors
- @Koichi5 made their first contribution in #367
- @hyshu made their first contribution in #368
- @devfelipereis made their first contribution in #369
- @dorklein made their first contribution in #375
- @jaydanurwin made their first contribution in #392
- @dickermoshe made their first contribution in #412
- @Yegair made their first contribution in #422
- @google-labs-jules[bot] made their first contribution in #425
- @halifox made their first contribution in #432
- @DavidPluxia made their first contribution in #436
Full Changelog: v6.0.1...v7.0.0
Release notes
Open source →⚠️ BREAKING CHANGES
- SignalBuilder Constructor: Updated
SignalBuilderto accept a required named parameterrequired Widget Function(BuildContext) builderinstead of a positional function argument. This aligns it perfectly as a drop-in replacement for Flutter's nativeBuilderwidget.
🚀 New Features
- SignalProvider & MultiSignalProvider Stateful Lifecycle: Completely redesigned
SignalProvideras aStatefulWidgetto maintain the reactive signal instance across parent rebuild cycles. Adds automaticdispose()teardown of created signals when unmounted, customdisposecallback support, andSignalProvider.valueconstructor to expose managed signals without teardown. Also addsSignalProvider.multi/MultiSignalProviderto flatten deeply nested builder hierarchies into a convenient flat list. - SignalWidget & SignalStatefulWidget: Added stateless and stateful base widgets that establish implicit reactive contexts directly at the element layer. Any signal value accessed synchronously via
.valuein theirbuild()methods will automatically schedule surgical, frame-coalesced rebuilds. - SignalAnimatedBuilder: Added a modern transition builder widget designed for subtree rendering optimization. Accepts an optional pre-built static
childwidget which is cached and never rebuilt when signal values mutate. - SignalEffect / SignalListener: Added inline side-effects widgets that run reactive callbacks (e.g. snackbars, dialog triggers, routing) when tracked signals mutate. Handles setup, callback updates, and cleanup automatically on unmount.
- SignalCustomPaint & SignalPainterWidget: Added canvas drawing targets that bypass element rebuild cycles by listening directly to signals at the rendering layer to trigger
markNeedsPaint()directly. - Widget & Element Conversion Options: Added
toSignalWidget()onStatelessWidgetandtoSignalStatefulWidget()onStatefulWidgetto seamlessly upgrade standard widgets to reactive versions. Also addedwatchSignalextensions onStatelessElementandStatefulElement.
⚡ Deprecations & Optimizations
- Deprecated legacy
Watch,WatchBuilder,SignalsMixin, and the.watch(context)context watch extensions. - Modernized legacy
WatchandWatchBuilderunder the hood to act as lightweight, stateless adapters delegating directly toSignalBuilderandSignalAnimatedBuilderto achieve zero-allocation state overhead. - Optimized
.watch(context)extension with a memory-safeExpando/WeakReference/Finalizerengine preventing lapsed-listener memory leaks and object identity hash collisions.
-
6.3.125 May 2026Release notes
Open source →- REFACTOR: migrate signal mixins to mixin classes.
- FIX(flutter): prevent ConcurrentModificationError in SignalsMixin.
- FIX(signals_flutter): remove listener on dispose for ValueListenable.toSignal().
- FIX: resolve hashCode collision in .watchSignal.
- FEAT(signals_flutter): return FlutterSignal/-Computed from SignalsMixin.createSignal/-Computed.
-
6.3.030 Nov 2025Release notes
Open source →- Fix listener on dispose for ValueListenable.toSignal()
- Return FlutterSignal/FlutterComputed from SignalsMixin.createSignal/createComputed
- Fix hashCode collision in .watchSignal
- Bump signals_core to 6.2.1
-
6.2.030 Sep 2025Release notes
Open source →- Adding SignalsAutoDisposeMixin
- Computed/Signal now use SignalsAutoDisposeMixin but ReadonlySignalMixin no longer has dispose methods
- Tests now check for SignalEffectException and not error
- Exposing SignalEffectException from preact_signals
- Bump preact_signals to 1.9.3
- Computed not also can throw SignalEffectException instead of generic error
- Bump signals_core to 6.2.0
-
6.1.030 Sep 2025Release notes
Open source →- Bump signals_core to 6.1.0
- Fix error in effect not showing StackTrace
- Add extensions for List, Map, Set, Iterable, bool, String, int, double, num, Comparable, Pattern, Enum
- Add persisted signals for bool, double, Enum, int, num, String and Json (including nullable for each)
- Add SignalsKeyValueStore and SignalsInMemoryKeyValueStore for storage
- Add $ extension method for common types to create signal and function for computed
Signal<int> count = 0.$; Computed<double> doubleValue => (() => count() * 2).$; Signal<String> name = 'Flutter'.$; Signal<bool> isTrue = true.$; Signal<Brightness> brightness = Brightness.light.$; Signal<double> progress = 0.5.$;- Add SignalEffectException for getting the error and StackTrace for a failed effect callback
-
6.0.202 Dec 2024Release notes
Open source →What's Changed
- chore: Add update all pubspec script by @mcmah309 in #353
- Updates related to 6 0 0 by @mcmah309 in #354
- Improve AsyncState by @mcmah309 in #355
- fix computed signal cycle by @NabilaWorks in #352
Full Changelog: v6.0.0...v6.0.1
Release notes
Open source →- Fix cycle error with TrackedSignalMixin and Computed
- Add
AsyncErrorReloading,AsyncErrorRefreshing,AsyncDataReloading,AsyncDataRefreshing
-
6.0.129 Nov 2024 -
6.0.028 Nov 2024Release notes
Open source →- Remove SignalStream controller
- Upgrade SignalsProvider/ComputedProvider/ReadonlySignalProvider to default imports
- Add FlutterSignal to extends ValueNotifier
- Add FlutterComputed/FlutterReadonlySignal to extends ValueListenable
- Removing deprecated methods
- Add more methods to SignalsMixin
- Switching to preact_signals package for core implementation
- Removing old deprecated methods
- Add new mixins: EventSinkSignalMixin, SinkSignalMixin, StreamSignalMixin, SetSignalMixin, ListSignalMixin, MapSignalMixin, QueueSignalMixin, ChangeStackSignalMixin, IterableSignalMixin
- Update AsyncSignal to implement EventSink
- Removing previous/initial value from Signal and Computed in favor of TrackedSignal, TrackedSignalMixin and trackedSignal()
- Update SignalsObserver to include value for signal created (instead of peek())
- Updated examples
- Remove callback to signal
- Remove toSignal extension method (causing unintended casts) in favor of .$ for Object/Object?
- Add WatchBuilder to include a child callback for caching a widget between rebuilds
- Removing ComputedProvider/ReadonlySignalProvider
-
6.0.0-rc.528 Nov 2024 pre-releaseNothing published for this version
-
6.0.0-rc.428 Nov 2024 pre-releaseNothing published for this version
-
6.0.0-rc.322 Nov 2024 pre-releaseNothing published for this version
-
6.0.0-rc.221 Nov 2024 pre-releaseNothing published for this version
-
6.0.0-rc.120 Nov 2024 pre-releaseNothing published for this version
-
6.0.0-rc.026 Oct 2024 pre-releaseNothing published for this version
-
5.5.118 Oct 2024 -
5.5.002 Sep 2024 -
5.4.017 Aug 2024Release notes
Open source →- Add SignalsMixin to replace .watch, createComputed/createSignal, SignalsAutoDisposeMixin and implementation for Watch
- Signals now render with fewer rebuilds
- Adding new deprecated warnings
- Fix: https://github.com/rodydavis/signals.dart/issues/292
- Update to
signals_core5.4.0
-
5.3.030 Jul 2024Release notes
Open source →- Add Signal.lazy and lazySignal
- Add signal.isLazy and computed.isLazy
- Add await future to refresh/reload for FutureSignal
- Update to
signals_core5.3.0 - FIX: https://github.com/rodydavis/signals.dart/issues/279
- Fixing signal/computed not disposing in SignalsAutoDisposeMixin
- createSignal/createComputed now are autoDispose=true by default
-
5.2.330 Jul 2024Release notes
Open source →- FIX: https://github.com/rodydavis/signals.dart/issues/283
- Changing toJson from T to dynamic
- Update to
signals_core5.2.3
-
5.2.204 Jun 2024Release notes
Open source →- FIX: https://github.com/rodydavis/signals.dart/issues/265
- Update to
signals_core5.2.2 - FIX: https://github.com/rodydavis/signals.dart/issues/266
-
5.2.108 May 2024Release notes
Open source →- FIX: https://github.com/rodydavis/signals.dart/issues/258
- FIX: https://github.com/rodydavis/signals.dart/issues/262
- Update to
signals_core5.2.0
-
5.2.022 Apr 2024Release notes
Open source →- Update to
signals_core5.1.0 - Sync core implementation with
@preactjs/signalspackage - Allow mutations in computed
- Share peek implementation for signal/computed
- Inline various methods for performance
- Update to
-
5.1.020 Apr 2024Release notes
Open source →- Fix #247 - element watcher causing effect cycle error
- Fix #245 - unmounted widget causing error on context read
- Adding
InheritedSignalProviderandReadonlySignalProviderfor Flutter - Update to
signals_core5.0.1 - Switching
SignalsObserverto useloginstead ofprint - Only setting
SignalsObserverto useDevToolsSignalsObserverinkDebugMode - Changing
SignalProviderdefault constructor to usecreate
-
5.0.013 Apr 2024Release notes
Open source →- Adding
previousValue/initialValuetoSignal - Removing
SignalEquality - Deprecating
ValueSignalin favor ofSignal - Deprecating
.forceUpdatein favor of.set(..., force: true) - Removing old deprecated methods
- Adding more inline code documentation
- ListSignal/SetSignal now extends IterableSignal
- Fixing ChangeStackSignal getters for history/redos to return an iterable list
- Fixing async signal isCompleted race condition
- Adding
createSignal/createComputed/createEffectfor Flutter - Adding
SignalsAutoDisposeMixinfor Flutter - Update to
signals_core5.0.0
- Adding
-
5.0.0-beta.1513 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.1412 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.1311 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.1211 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.1111 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.1006 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.906 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.806 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.706 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.606 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.506 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.406 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.305 Apr 2024 pre-releaseNothing published for this version
-
5.0.0-beta.205 Apr 2024 pre-releaseNothing published for this version
-
4.5.101 Mar 2024 -
4.5.029 Feb 2024Release notes
Open source →- Updating documentation comments
- Fixing signals observer bug on effect
- Removing previousValue from value signal
- Add ability to remove an onDispose callback
- Update to
signals_core4.5.0
-
4.4.021 Feb 2024Release notes
Open source →- adding overrideWith
- fix autoDispose not passed in for some signals
- fix equality not being passed in for some signals
- fix for completed not being reset on async signal
- Update to
signals_core4.4.0
-
4.3.019 Feb 2024 -
4.2.315 Feb 2024Release notes
Open source →- FIX: https://github.com/rodydavis/signals.dart/issues/171
- Update to
signals_core4.2.1
-
4.2.211 Feb 2024 -
4.2.111 Feb 2024 -
4.1.006 Feb 2024Release notes
Open source →- Fix bug in auto dispose where signal dispose causes cycle
- Dispose does not reset to initial value and will read the last value with a warning
-
4.0.305 Feb 2024 -
4.0.205 Feb 2024Release notes
Open source →- Adding SignalsWriteAfterDisposeError/SignalsReadAfterDisposeError for better error handling
-
4.0.105 Feb 2024 -
4.0.005 Feb 2024Release notes
Open source →- StreamSignal now will rebuild with signals are read in the callback to create the stream
- Stream/Future signal both can take an optional list of dependencies to rebuild on
- FutureSignal now extends StreamSignal
- StreamSignal can now rebuild/refresh
- StreamSignal can now pause/resume
- Adding computedAsync/computedFrom for similar API to angular
- Adding
.set(..., force: true)to Signal/Computed to force a rebuild - Adding
.recompute()for Computed to recall the callback - Adding autoDispose for Signal/Computed
- Adding some helper signals not included in the default export
- Signals for WidgetsBinding and SchedulerBinding
- Signals for Theme/MediaQuery
- TickerSignal for Flutter animations
-
3.0.017 Jan 2024Release notes
Open source →- adding readonlySignalContainer to be existing signalContainer API
- updating signalContainer to allow for mutable signals
- adding SignalEquality to allow override of ==
- adding
selectfor signals to return a computed value - fix memory leak on signal container
- adding ChangeStackSignal
-
1.0.820 Dec 2023 -
1.0.719 Dec 2023 -
1.0.618 Dec 2023 -
1.0.518 Dec 2023 -
1.0.418 Dec 2023Release notes
Open source →- Updating
signals_corepackage 1.0.2 - Adding
Watch.builderfor non positional argument usage and direct replacement forBuilder
- Updating
-
1.0.315 Dec 2023 -
1.0.215 Dec 2023 -
1.0.114 Dec 2023