zenify 1.9.0
zenify: ^1.9.0 copied to clipboard
Powerful asynchronous state management, automatic caching, hierarchical DI, and zero-boilerplate reactivity. A holistic architecture for modern Flutter apps.
1.9.0 #
Added #
tagsparameter onZenQueryfor group-based cache managementZenQueryCache.invalidateQueriesByTag(tag)andrefetchQueriesByTag(tag)ZenQueryCache.invalidateQueriesByPattern(pattern)andrefetchQueriesByPattern(pattern)— supports glob-style*wildcardsZenQueryCache.getQueriesByTag(tag)andgetKeysByTag(tag)for tag inspectionInMemoryStorage— a built-in zero-dependencyZenStorageadapter for testing and ephemeral storage- Warning log when a wildcard pattern matches all queries (e.g.
'*')
1.8.0 #
Breaking Changes #
- Removed
ZenInspectorOverlaywidget. Remove the wrapper from your app —Zen.init(registerDevTools: true)continues to work as before.
// Before
runApp(ZenInspectorOverlay(child: MyApp()));
// After
runApp(MyApp()); // DevTools integration unchanged
Changed #
- DevTools UI moved to a separate optional package:
zenify_devtools_extension - Core package is ~25MB smaller as a result
1.7.0 #
Added #
- Flutter DevTools extension with 3-tab inspector: Scope Inspector, Query Cache Viewer, Metrics Dashboard
ZenServiceExtensionsclass for VM Service Protocol integration- Automatic service extension registration via
Zen.init(registerDevTools: true)in debug builds - Zero performance impact in release builds
1.6.6 #
Added #
ZenExceptionbase class with compact (default) and verbose (ZenConfig.verboseErrors = true) error formatting- Specific exception types:
ZenDependencyNotFoundException,ZenCircularDependencyException,ZenDisposedScopeException,ZenScopeNotFoundException,ZenControllerNotFoundException,ZenControllerDisposedException,ZenOfflineException,ZenQueryException,ZenMutationException,ZenModuleException,ZenLifecycleException,ZenRouteException ZenLogger.logException(e)for formatted exception outputZenConfig.verboseErrorstoggle
1.6.5 #
Added #
- "Pending Mutations" card in DevTools Stats View
ZenMutationQueue.pendingCountandpendingJobsfor debugging- Visual offline queue status indicator in DevTools
1.6.4 #
Added #
ZenObserver— alias forObxwidgetscope.get<T>()— alias forscope.find<T>()scope.remove<T>()— alias forscope.delete<T>()scope.has<T>()— alias forscope.exists<T>()
1.6.3 #
Added #
Zen.get<T>()— alias forZen.find<T>()Zen.remove<T>()— alias forZen.delete<T>()Zen.has<T>()— alias forZen.exists<T>()Zen.queryCache— shorthand forZenQueryCache.instance
1.6.2 #
Breaking Changes #
OptimisticMutationrenamed toZenMutation(helpers are now static methods)listAdd→listPut,listUpdate→listSet,add→put,update→set
// Before
OptimisticMutation.listAdd<Post>(queryKey: 'posts', mutationKey: 'create', mutationFn: ...)
// After
ZenMutation.listPut<Post>(queryKey: 'posts', mutationFn: ...) // mutationKey auto-generated
Changed #
mutationKeyis now optional; auto-generated fromqueryKeyif omitted
1.6.1 #
Added #
ZenMutation.listPut<T>,listSet<T>,listRemove<T>— optimistic list helpers with automatic rollbackZenMutation.put<T>,set<T>,remove()— optimistic single-value helpers
1.6.0 #
Added #
ZenStorageinterface for pluggable persistence backends (SharedPreferences, Hive, SQLite, etc.)- Auto-hydration: queries load cached data from storage on startup
- Offline mutation queue: mutations triggered while offline are queued and replayed on reconnect
ZenQueryCache.setQueryData()for function-based optimistic cache updatesNetworkModeenum:online,offlineFirst,alwaysexample/zen_offline— full offline-first example app
1.5.0 #
Breaking Changes #
refetchOnMount,refetchOnFocus,refetchOnReconnectchanged frombooltoRefetchBehaviorenum
// Before
ZenQueryConfig(refetchOnMount: true)
// After
ZenQueryConfig(refetchOnMount: RefetchBehavior.ifStale)
// New option: RefetchBehavior.always — force refetch regardless of staleness
Added #
RefetchBehavior.alwaysfor real-time/critical data use casesZenQueryConfig.retryDelayFn— custom function for error-aware retry delays
1.4.4 #
Fixed #
ZenInspectorOverlaycrashes when used without aScaffold— replacedScaffoldMessengerwith internal toast system- Layout overflows and data preview scrolling in inspector
1.4.3 #
1.4.1 #
Added #
ZenQueryClientandZenQueryClientOptionsfor managing global query defaultsZenQueryConfig.copyWith()for partial config overrides
1.4.0 #
Added #
pause()andresume()methods onZenQueryandZenStreamQueryZenQueryConfig.autoPauseOnBackgroundandrefetchOnResumeZenQueryCache.getAllQueries()for lifecycle management- Exponential backoff:
maxRetryDelay,retryBackoffMultiplier,retryWithJitter
Breaking Changes #
ZenStreamQuerynow defaults toautoPauseOnBackground: false(wastruein 1.3.x)
// To restore previous behavior
ZenStreamQuery(config: ZenQueryConfig(autoPauseOnBackground: true))
1.3.6 #
Fixed #
Zen.reset()no longer requirestestWidgets()— works in plaintest()blocksZenLifecycleManagerhandles missingWidgetsBindingin test environments gracefully
1.3.5 #
1.3.4 #
Changed #
- Fixed
createControllersyntax in all documentation - Rewrote
state_management_patterns.mdwith clearer examples
1.3.3 #
Fixed #
- 1-pixel
RenderFlexoverflow inZenInspectorOverlayon iOS/Android with no dependencies - Improved overlay positioning with explicit
Positioned.fill
1.3.2 #
Added #
ZenInspectorOverlay— in-app debug overlay with real-time scope hierarchy, query cache, and performance stats
1.3.1 #
Added #
- Automatic query tracking: queries created in
onInit()are automatically disposed when the controller closes — noonClose()boilerplate required
1.3.0 #
Changed #
- Internal architecture refactoring: replaced
ZenScopeManager(541 lines) andZenScopeStackTrackerwith a singleZen.currentScopenavigation bridge (~80% reduction in scope management code) ZenRoutereduced from 526 to 336 lines
Added #
parentScopeparameter onZenRoutefor explicit scope control
Breaking Changes #
- None. All public APIs unchanged.
1.2.3 #
Fixed #
ZenStreamQuerynow pauses oninactiveandhiddenapp states (web tab switching)- Lifecycle events (
onPause,onResume) now fire correctly when query is not registered in DI
1.2.1 #
Added #
ZenInfiniteQuery.getPreviousPageParam()andfetchPreviousPage()for bidirectional paginationhasPreviousPageandisFetchingPreviousPagereactive properties- Call-time callbacks on
mutate():onSuccess,onError,onSettled placeholderDatainZenQueryConfig— temporary initial data that doesn't persist to cachekeepPreviousDataonZenQueryBuilderandZenStreamQueryBuilderto prevent flash-of-loading on key changes
1.2.0 #
Added #
ZenStreamQuery— reactive wrapper forStream<T>with lifecycle management and optimistic updatesZenStreamQueryBuilderwidget
Changed #
- Folder restructure: builders moved to
lib/widgets/builders/, query internals tolib/query/core|logic|extensions/ import 'package:zenify/zenify.dart'is unaffected
1.1.9 #
Added #
ZenStorageinterface (foundation for 1.6.0 offline engine)persist,fromJson,toJson,storageoptions onZenQueryConfig- Auto-hydration from storage on query initialization
1.1.8 #
Breaking Changes #
- Fetcher signature now requires a
ZenCancelTokenparameter
// Before
fetcher: () => api.getData()
// After
fetcher: (_) => api.getData()
Added #
ZenCancelTokenfor platform-agnostic request cancellation- Automatic cancel on dispose and on re-trigger (prevents stale data race conditions)
1.1.7 #
1.1.6 #
Added #
enabledparameter andRxBool enabledproperty onZenQueryfor dependent queriesZenQueryCache.instance.prefetch()for pre-loading data without creating listeners
1.1.4 #
Added #
ZenInfiniteQueryfor paginated lists and infinite scrollingqueryKeynow acceptsObject(includingList) in addition toString
1.1.3 #
Added #
ZenMutationfor reactive write operations (create, update, delete)- Lifecycle hooks:
onMutate,onSuccess,onError,onSettled ZenQueryCache.invalidateQuery()integration pattern
1.1.1 #
Added #
scopeparameter onZenQueryfor automatic disposal with scope lifecycleZenQueryCache.invalidateScope(),refetchScope(),clearScope(),getScopeQueries(),getScopeStats()
1.1.0 #
Added #
ZenQuery— async state management with caching, deduplication, retries, and background refetchZenQueryBuilder— reactive widget with loading/error/success states and SWR patternZenQueryCache— global cache manager with invalidation and memory management
1.0.1 #
1.0.0 #
Breaking Changes #
EagerRef,LazyRef,ControllerRef,ZenRefreplaced by a singleRef<T>.put(),.asRef(),.register()extension methods removed — useZen.put()Zen.putFactory()removed — useZen.putLazy(..., isPermanent: false)- Debug methods moved to
ZenDebugclass:ZenDebug.dumpScopes()etc.
Added #
Ref<T>universal reference withcall()shorthand- Improved
ZenBuilderwith proper DI cleanup and ownership tracking
0.6.3 #
Added #
ZenEnvironment.productionVerboseenvironment presetZenConfig.shouldLogRoutesandshouldLogNavigationhelpers
0.6.2 #
Fixed #
- Inverted logic in
shouldLog()causing logs to appear when suppressed - Rx tracking logs now respect
ZenConfig.enableRxTracking
0.6.1 #
0.6.0 #
0.5.0 #
Initial pub.dev release.
0.4.1 #
0.4.0 #
0.3.0 #
Added #
RxResult<T>for success/failure error handling patternsRxComputedfor automatic dependency trackingRxFuturefor reactive async operations- Circuit breaker pattern for resilient reactive operations
- Batch operations and bulk updates for collections
0.1.7 #
0.1.5 #
Added #
- Hierarchical scope system
- Circular dependency detection
- Module/binding system for organized registration
- Lazy initialization support
0.1.4 #
Added #
- Generic type constraints on
RxList<E>,RxMap<K,V>,RxSet<E> ControllerRef<T>typed provider references
0.1.3 #
0.1.2 #
Fixed #
- Minimum Dart SDK updated to 2.19.0
- Deprecated
IndexErrorusage - Collection type safety in
RxList,RxMap,RxSet
0.1.1 #
Initial release — reactive state, controller lifecycle management, route-based disposal.