signals_flutter 7.1.0
signals_flutter: ^7.1.0 copied to clipboard
The signals library exposes four core functions which are the building blocks to model any business logic you can think of.
7.1.0 #
🚀 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.0 #
⚠️ 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.1 #
- 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.0 #
- 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.0 #
- 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.0 #
- 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.2 #
- Fix cycle error with TrackedSignalMixin and Computed
- Add
AsyncErrorReloading,AsyncErrorRefreshing,AsyncDataReloading,AsyncDataRefreshing
6.0.1 #
- Fix issue with StreamSignal
_stream not initialized
6.0.0 #
- 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
5.5.1 #
- Fix for Watch.builder not rebuilding with InheritedWidget
5.5.0 #
- Fix for hot reload
- Removing deprecation warning for watch/unwatch
5.4.0 #
- 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.0 #
- 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.3 #
- FIX: https://github.com/rodydavis/signals.dart/issues/283
- Changing toJson from T to dynamic
- Update to
signals_core5.2.3
5.2.2 #
- 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.1 #
- 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.0 #
- 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
5.1.0 #
- 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.0 #
- 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
4.5.1 #
- Fixing Watch in hot reload with auto dispose signals
4.5.0 #
- 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.0 #
- 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.0 #
- Add valueNotifierToSignal, valueListenableToSignal
4.2.3 #
- FIX: https://github.com/rodydavis/signals.dart/issues/171
- Update to
signals_core4.2.1
4.2.2 #
- Update to
signals_core4.2.0
4.2.0 #
- FIX: https://github.com/rodydavis/signals.dart/issues/156.
- FIX: https://github.com/rodydavis/signals.dart/issues/162.
- Add onDispose callback for effect
- Fixing computed not updating on signal forced change
4.1.0 #
- 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.3 #
- Removing SignalsReadAfterDisposeError in favor of debug print warning
4.0.2 #
- Adding SignalsWriteAfterDisposeError/SignalsReadAfterDisposeError for better error handling
4.0.1 #
- Fix for listen causing multiple callbacks on non static methods
4.0.0 #
- 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.0 #
- 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.8 #
- Updating
signals_corepackage 1.0.6
1.0.7 #
- Fixing
listenin extension with multiple signals
1.0.6 #
- Fixing
watchin extension with multiple signals
1.0.5 #
- Updating
signals_corepackage 1.0.3
1.0.4 #
- Updating
signals_corepackage 1.0.2 - Adding
Watch.builderfor non positional argument usage and direct replacement forBuilder
1.0.3 #
- Fixing memory leak for
watch/listen
1.0.2 #
- Fixing memory leak for
watch/listen
1.0.1 #
Watchwidget improvements (reducing extra first frame build)
1.0.0 #
- Moving core api from
signalspackage tosignals_corepackage - Depending on
signals_corepackage 1.0.1 - Adding Flutter extensions for
signals_flutterpackage