NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2874 most downloaded on pub.dev
The simple state management powered by get_it. It allows to observe changes of objects inside the get_it service locator and rebuild the UI accordingly.
Last release 18 days ago
19 Sep 2026
Release timing varies
gaps range from 8 days to 7 months
Most releases are documented
notes for 33 of 37 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
37 releases · first in 2023
One column per quarter.
Requires get_it 9.3.0 (uses the new ObjectRegistration.acceptsParams).
ObjectRegistration.acceptsParams).param1/param2 to watchIt, watchValue, watchPropertyValue, watchStream, watchFuture, registerHandler, registerChangeNotifierHandler, registerStreamHandler and registerFutureHandler to watch objects created via registerCachedFactoryParam (e.g. one manager per entity id). Thanks to @Feichtmeier (#47, #46).allowObservableChange/allowStreamChange/allowFutureChange are still only required when the selector returns a different observable from the same parent.registerFactory/registerFactoryParam now throws a StateError, because every build would get a new instance and the widget could never stay subscribed. Use registerCachedFactory/registerCachedFactoryParam, a singleton, or pass the instance via target:. Passing param1/param2 for a registration that isn't a cached factory, or combining them with target:, also throws.Added AI skill files in skills/ directory for AI coding assistants
skills/ directory for AI coding assistantsV2.4.1: Fix allReady() returning stale value when new async singleton…
V2.4.1: Fix allReady() returning stale value when new async singleton…
allReady() returning stale true value when new async singletons are registered
false and shows loading state until new singletons completeallReady() now properly detects when new async singletons are registered in pushed scopes
allReady() now properly detects when new async singletons are registered in pushed scopes
allReady() would not rebuild the UI when pushNewScope() registered new async singletonsallReady() futureRemove generated test folder from example
Remove generated test folder from example
The new name better reflects the actual behavior: it executes once after the first build where the function is called, not necessarily after the widge
The new name better reflects the actual behavior: it executes once after
the first build where the function is called, not necessarily after the
widget's first build. This makes it clear that it can be safely used
inside conditionals.
Enhanced documentation with better explanation of behavior and added
example showing usage in conditionals for navigation when async
dependencies are ready.
Version: 2.2.0
callAfterFirstBuild() → callOnceAfterThisBuild(). The new name better reflects the actual behavior: it executes once after the first build where the function is called, not necessarily after the widget's first build. This makes it clear that it can be safely used inside conditionals. Since this function was only introduced in version 2.0.0, migration should be straightforward - just update the function name in your code.callOnceAfterThisBuild() with better explanation of behavior and added example showing usage in conditionals for navigation when async dependencies are ready.Update example to command_it 9.0.2 API
Update example to command_it 9.0.2 API
execute → run, isExecuting → isRunning)Improved error messages for watch ordering violations with clear guidance
Fix codecov badge to point to flutter-it organization
Fix codecov badge to point to flutter-it organization
Add callAfterFirstBuild() for executing callbacks after first frame render
New Features:
Breaking Changes:
Performance Improvements:
Bug Fixes:
Tests: All 57 tests passing
functional_listener ^4.0.0 with listen_it ^5.1.0. This is a breaking change as functional_listener has been renamed and restructured into listen_it. If you use functional_listener operators in your code, update your imports from package:functional_listener/functional_listener.dart to package:listen_it/listen_it.dart.watchValue() and registerHandler() now default to allowObservableChange: false for better performance and memory leak prevention. This means the selector function is only called once on first build. If you need to dynamically switch observables (e.g., condition ? obsA : obsB), set allowObservableChange: true. This prevents common memory leaks from inline chain creation like watchValue((m) => m.source.map(...)).callAfterFirstBuild() function that executes a callback once after the first frame has been rendered. This is useful for operations that require the widget tree to be fully built and laid out, such as showing dialogs, accessing widget dimensions, scrolling to positions, or starting animations that depend on final widget sizes. This replaces the common pattern of using WidgetsBinding.instance.addPostFrameCallback in initState().callAfterEveryBuild() function that executes a callback after every frame has been rendered. This is useful for operations that need to run after each rebuild, such as updating scroll positions, repositioning overlays, or performing measurements. The callback includes a cancel() function to stop future invocations when needed.watchValue() and registerHandler() now have zero overhead on rebuilds with default settings - selectors are only called once instead of on every buildStateError messages when observables change unexpectedly with allowObservableChange: false, guiding users to the correct fixcreateOnceAsync test isolation issue by properly resetting testCompleter in setUptarget → parentOrListenable, etc.)Nothing published for this version
PR by @timmaffett imrproving the markdown of the readme
adding createOnce to the readme
sl alias for difixing an exception in Streambuilder during loading state if you don't provide an inital value
Fix for https://github.com/escamoteur/watch_it/issues/42
* fixing linter warnings
Adding createOnce and createOnceAsync
createOnce and createOnceAsyncNothing published for this version
Nothing published for this version
Nothing published for this version
fix for https://github.com/escamoteur/watch_it/issues/28
thanks to the pr https://github.com/escamoteur/watch_it/pull/27 by @jefflongo pushScope now accepts the isFinal parameter that the underlying get_it f
pushScope now accepts the isFinal parameter that the underlying get_it function does for some time now.added executeHandlerOnlyOnce to registerFutureHandler, allReady and allReadyHandler
executeHandlerOnlyOnce to registerFutureHandler, allReady and allReadyHandlercallOnce and onDispose. See readme for detailsthanks to the PR from @smjxpro https://github.com/escamoteur/watch_it/pull/22 you now can register handlers for pure Listenable/ChangeNotifiers too
https://github.com/fluttercommunity/get_it/issues/345 allReady() will now throw a correct error if an exception is thrown in one of the factory functi
allReady() will now throw a correct error if an exception is thrown in one of the factory functions that allReady() checksTypo fixes by PRs from @mym0404 @elitree @florentmx
* updates Discord invite link
added some more asserts to provide better error messages in case you forgot to use the WatchItMixin
* bumped get_it version
thanks for PR by @yangsfang https://github.com/escamoteur/watch_it/pull/10
* small change in documentation
fix for https://github.com/escamoteur/watch_it/issues/8
added safety checks in case _element gets null but still a handler might get called
* improving readme
* fix typo
* First beta release
This is currently just a placeholder for the new version of the get_it_mixin
Your coding agent can read these notes before it upgrades. Set up the MCP server →