zenify 1.2.3
zenify: ^1.2.3 copied to clipboard
Powerful asynchronous state management, automatic caching, hierarchical DI, and zero-boilerplate reactivity. A holistic architecture for modern Flutter apps.
1.2.3 #
π Bug Fixes & Improvements #
Fixed Stream Query lifecycle behavior on Web and improved debugging visibility.
Improvements
- Web Lifecycle Fix:
ZenStreamQuerynow correctly pauses subscriptions when the app becomesinactive(e.g., switching tabs on Web) orhidden, not justpaused. - Lifecycle Propagation:
ZenStreamQuerynow correctly triggersonPause,onResume, and other lifecycle methods even if the query instance isn't directly registered in the DI system (e.g., when used as a class member). - Better Logging: Added explicit info-level logs for
inactiveandhiddenstates to make debugging stream lifecycles easier.
1.2.1 #
π Bidirectional Pagination & Mutation Context #
Enhanced Infinite Query, smarter Mutations, and better UX controls.
New Features
-
Bidirectional Infinite Query: Added support for fetching previous pages.
ZenInfiniteQuerynow supportsgetPreviousPageParamandfetchPreviousPage().- Perfect for chat applications (scroll up to load history) or bidirectional lists.
- Added
hasPreviousPageandisFetchingPreviousPagereactive properties.
ZenInfiniteQuery( queryKey: 'chat', infiniteFetcher: (pageParam, token) => api.getMessages(pageParam), getNextPageParam: (lastPage, _) => lastPage.nextCursor, getPreviousPageParam: (firstPage, _) => firstPage.prevCursor, // New! ); -
Mutation Context & Callbacks:
onMutatecan now return a context object that is passed toonErrorandonSettled(useful for rolling back optimistic updates).- Call-Time Callbacks:
mutate()now acceptsonSuccess,onError, andonSettledfor one-off logic (e.g. navigation or snackbars) alongside the global definition.
-
Placeholder Data:
- Added
placeholderDatatoZenQueryConfigto show initial data while the real fetch is happening. - Unlike
initialData, this does not persist to cache and is treated as temporary.
- Added
-
Builder Improvements:
keepPreviousData:ZenQueryBuilderandZenStreamQueryBuildercan now keep showing data from a previous query instance while the new one loads. This prevents "flash of loading" when changing query keys (e.g. pagination or filters).
1.2.0 #
π ZenStreamQuery & Project Restructuring #
Added first-class support for Streams and reorganized the project structure for better scalability.
New Features
-
ZenStreamQuery: A reactive wrapper for Streams with the same powerful API as
ZenQuery.- Real-time Data: tailored for WebSockets, Firebase, or any
Stream<T>. - Lifecycle Management: Automatically pauses subscriptions when the app is paused (if configured).
- Optimistic Updates: Support for
setDatato manually update the stream state while waiting for events. - Safe: Handles errors and subscription cleanup automatically.
final chatQuery = ZenStreamQuery( queryKey: 'chat-messages', streamFn: () => chatService.messagesStream, ); - Real-time Data: tailored for WebSockets, Firebase, or any
-
ZenStreamQueryBuilder: A dedicated widget for handling stream states.
- Handles
loading(initial connection),data(stream events), anderrorstates. - Smartly keeps showing data while reconnecting if available.
ZenStreamQueryBuilder<List<Message>>( query: chatQuery, builder: (context, messages) => ChatList(messages), loading: () => const Spinner(), error: (err) => ErrorBanner(err), ); - Handles
β»οΈ Refactoring & Improvements
- Folder Restructuring:
- Separated UI components from core logic for better maintainability.
- Moved builders to
lib/widgets/builders/(ZenQueryBuilder,ZenStreamQueryBuilder, etc.). - Reorganized
lib/query/intocore/,logic/, andextensions/. - Note: If you import specific files instead of the main package file, you may need to update your imports. Using
import 'package:zenify/zenify.dart';remains the recommended way and requires no changes.
1.1.9 #
πΎ Offline Persistence Architecture #
Added foundation for persisting query state across app restarts.
New Features
- ZenStorage Interface: Define your own storage backend (SharedPreferences, Hive, etc.) for persisting query data.
- Implement
ZenStorageand inject viaZenQueryCache.instance.setStorage().
- Implement
- Persistence Configuration:
- Added
persist,fromJson,toJson, andstorageoptions toZenQueryConfig. ZenQuerynow automatically hydrates from storage on initialization if configured.- Data is automatically persisted to storage on successful fetches.
// Enable persistence ZenQueryConfig( persist: true, fromJson: User.fromJson, toJson: (user) => user.toJson(), ) - Added
1.1.8 #
π Smart Cancellation & Network Efficiency #
Introduced ZenCancelToken to prevent network waste and handle query cancellation gracefully.
β οΈ Breaking Changes
- Fetcher Signature Update:
ZenQuery.fetchernow requires aZenCancelTokenparameter:(token) => ....ZenInfiniteQuery.infiniteFetchernow requires aZenCancelTokenparameter:(pageParam, token) => ....- Migration: Update your fetcher functions to accept the token argument (you can use
_if unused).// Before fetcher: () => api.getData() // After fetcher: (_) => api.getData()
New Features
- ZenCancelToken: A platform-agnostic token for cancelling async operations.
- Universal Compatibility: Works with
http,dio, or any async library. - Automatic Cleanup: Queries automatically cancel pending requests when disposed or re-triggered.
- Race Condition Handling: Prevents "old" data from overwriting "new" data if multiple fetches occur rapidly.
ZenQuery( queryKey: 'search', fetcher: (token) async { final client = http.Client(); // Auto-close connection if user types fast or leaves page token.onCancel(() => client.close()); return api.search(term); }, ); - Universal Compatibility: Works with
Improvements
- ZenInfiniteQuery: Enhanced cancellation support for pagination.
fetchNextPage()now correctly cancels any in-flight "next page" requests if called again.- Full refreshes cancel any pending pagination requests.
1.1.7 #
π§ Smart Refetching Engine #
Added lifecycle and network awareness to ZenQuery for a more robust experience.
New Features
- Smart Refetching: Automatically keeps data fresh based on app state.
- Window Focus: Refetches stale queries when the app resumes (foreground).
- Network Reconnect: Refetches stale/failed queries when the device goes online.
- Configuration: Controlled via
ZenQueryConfig.refetchOnFocusandrefetchOnReconnect.
// Setup connectivity (e.g. in main.dart) Zen.setNetworkStream( Connectivity().onConnectivityChanged.map((res) => !res.contains(ConnectivityResult.none)) );
β»οΈ Architecture Improvements #
- Centralized Lifecycle Management: Moved app lifecycle observation (pause/resume) from individual controllers to
ZenLifecycleManager.- improved performance by having a single observer.
- Note for testing: Controllers must now be registered via
Zen.put()or within aZenScopeto receive lifecycle events (onPause, onResume, etc.). Standalone controllers in unit tests will not receive these events unless registered.
1.1.6 #
π Dependent Queries & Prefetching #
Added powerful tools for complex data flows and performance optimization.
New Features
-
Dependent Queries (
enabled): Control when a query should start fetching.-
Added
enabledparameter toZenQueryconstructor. -
Added reactive
RxBool enabledproperty to dynamically toggle fetching. -
Automatically triggers fetch when
enabledbecomestrue(if data is stale). -
Prevents fetching when
enabledisfalse.// Only fetch posts when user is loaded final postsQuery = ZenQuery( queryKey: ['posts', userId], fetcher: () => api.getPosts(userId), enabled: false, // Start disabled ); // Enable later (e.g. in onInit) postsQuery.enabled.value = true;
-
-
Data Prefetching: Pre-load data without creating listeners.
ZenQueryCache.instance.prefetch(): Fetches and caches data if stale.- Useful for
onHoveractions, route guards, or background sync.
1.1.5 #
π― Granular Reactivity for ZenQuery #
Introduced fine-grained state management for ZenQuery to optimize performance and prevent unnecessary rebuilds.
New Features
-
ZenQuery.select(): Create derived queries that only update when specific data changes. -
Performance: Prevents widget rebuilds when unrelated fields in a large object update.
-
Composition: Derived queries share the parent's lifecycle and state automatically.
-
Integration: Works seamlessly with
ZenQueryBuilderandZenWorkers.// Only rebuilds when isOnline changes ZenQueryBuilder<bool>( query: userQuery.select((user) => user.isOnline), builder: (context, isOnline) => OnlineBadge(isOnline), );
1.1.4 #
βΎοΈ ZenInfiniteQuery & Type-Safe Keys #
Major enhancements to the ZenQuery system including first-class pagination support and type-safe keys.
New Features
-
ZenInfiniteQuery: Specialized query for handling paginated lists and infinite scrolling.
- Automatic Pagination: Handles page concatenation, cursor management, and loading states.
- Smart Fetching:
getNextPageParamdetermines when and how to fetch the next page. - Helpers:
fetchNextPage(),hasNextPage,isFetchingNextPagebuilt-in. - UI Ready: Returns
List<T>containing all loaded pages, ready for rendering.
-
Typed Query Keys: Enhanced safety for cache keys.
queryKeynow acceptsObjectinstead of justString.- Support for List Keys:
['posts', 'user', 123]is automatically normalized to a stable key. - Eliminates string interpolation bugs (e.g.,
user:123vsuser-123). - Backward compatible with existing string keys.
Improvements
- ZenQueryCache: Updated internal storage to support normalized object keys.
- ZenScopeQueryExtension: Updated
putQueryandputCachedQueryto acceptObjectkeys.
1.1.3 #
β‘ Complete Data Lifecycle with ZenMutation #
Added support for reactive write operations to complement ZenQuery
New Features
- ZenMutation: A new reactive primitive for handling side effects (create, update, delete operations)
- Separates Command (Write) from Query (Read) responsibilities
- Lifecycle Hooks:
onMutate(for optimistic updates),onSuccess,onError, andonSettled - Reactive State: Built-in
isLoading,isSuccess,isError, anddatastate - Cache Integration: Designed to easily trigger
ZenQueryCache.invalidateQueryfor data consistency
Documentation
- Added complete Mutations section to
zen_query_guide.md - Added quick-start example for ZenMutation in
README.md - Documented optimistic update patterns and cache invalidation strategies
1.1.2 #
π― API Enhancement: Scoped Query Creation #
Simplified pattern for creating scoped queries in modules
New Features
- ZenScopeQueryExtension: Added convenient extension methods for scoped query creation
scope.putQuery<T>()- Create and register scoped query in one callscope.putCachedQuery<T>()- Create scoped query with common caching defaults- Automatic scope binding and registration
- Consistent with existing
scope.put()/scope.putLazy()API pattern
Improvements
- Reduced boilerplate when creating scoped queries in modules
- Eliminated common mistakes (forgetting to set scope, forgetting to register)
- Enhanced documentation with recommended patterns for scoped queries
- Updated ZenQuery Guide with
putQueryexamples
Documentation
- Comprehensive documentation in
zen_query_guide.mdfor both global and scoped patterns
1.1.1 #
π Scope-Aware ZenQuery #
ZenQuery now supports optional scope integration for automatic lifecycle management
New Features
-
Scope Integration: Tie queries to scopes for automatic disposal
- Pass
scopeparameter to bind query to a specific scope autoDisposeflag controls automatic cleanup behavior- Queries auto-dispose when their scope disposes (prevents memory leaks)
- Pass
-
Scope Operations: Bulk operations on scoped queries
ZenQueryCache.invalidateScope(scopeId)- Invalidate all queries in scopeZenQueryCache.refetchScope(scopeId)- Refetch all queries in scopeZenQueryCache.clearScope(scopeId)- Clear all queries from scopeZenQueryCache.getScopeQueries(scopeId)- Get all queries in scopeZenQueryCache.getScopeStats(scopeId)- Get scope query statistics
-
Enhanced Cache Statistics: Differentiate global vs scoped queries
global_queriescountscoped_queriescountactive_scopescount
Key Advantages
- β Automatic cleanup - Queries dispose with their scope (no memory leaks)
- β Cache isolation - Feature modules have isolated query caches
- β Flexible - Choose global or scoped based on use case
- β Backward compatible - Existing queries work without changes (default to global)
1.1.0 #
π Major Feature: ZenQuery System #
Async state management inspired by React Query and TanStack Query
New Features
-
ZenQuery: Smart query management with automatic caching, deduplication, and background refetching
- Automatic request deduplication (same query key = single request)
- Configurable stale time and cache time
- Automatic retries with exponential backoff
- Background refetching on configurable intervals
- Optimistic updates support
- Query invalidation and cache management
-
ZenQueryBuilder: Reactive widget for query-driven UI
- Auto-fetch on mount
- Show stale data while refetching (SWR pattern)
- Built-in loading, error, and success states
- Automatic retry functionality
- Custom state builders
-
ZenQueryCache: Global cache manager
- Query registration and lifecycle management
- Cache invalidation by key or prefix
- Bulk query refetching
- Memory management with automatic cleanup
- Cache statistics and debugging
Key Advantages Over Alternatives
- β 10x simpler for async data
- β Automatic caching with smart defaults
- β Built-in retry logic with exponential backoff
- β Zero boilerplate for common patterns
- β Production-ready with comprehensive error handling
1.0.1 #
Added #
- Added comprehensive testing guide (
doc/testing_guide.md) with examples for unit, widget, and integration testing
Changed #
- Simplified factory pattern API - removed
Zen.putFactory(), useZen.putLazy(..., alwaysNew: true)instead - Enhanced
putLazy()withalwaysNewparameter for factory pattern support - Improved logging - route and controller lifecycle events now use
logInfo()for better visibility
Fixed #
- Fixed
ZenScope.put()default parameter handling - Fixed factory cleanup logic in scope disposal
1.0.0 #
π Major Release - API Simplification #
Simplified API by 40% while maintaining 100% of the power. One obvious way to do it.
β οΈ Breaking Changes #
Unified References
- Removed:
EagerRef,LazyRef,ControllerRef,ZenRefclass - Added: Single
Ref<T>for all use cases
// Before
final ref = ZenRef.eager();
// Now
final ref = Ref();
Removed Extension Methods
- Removed:
.put(),.asRef(),.register()extensions - Use:
Zen.put()for all registrations
// Before
myService.put(tag: 'main');
// Now
Zen.put(myService, tag: 'main');
Simplified API
- Removed:
Zen.putFactory()- useZen.putLazy(..., isPermanent: false) - Moved: Debug methods to
ZenDebugclass
// Before
Zen.dumpScopes();
// Now
ZenDebug.dumpScopes();
β¨ New Features #
Ref<T>: Universal reference withcall()shorthand:ref()=ref.find()- ZenBuilder: Proper DI cleanup, ownership tracking, smart disposal defaults
- Module System: Fail-fast with clearer error messages
- Barrel Exports: Clean package structure with logical grouping
π§ Improvements #
- Better error messages with scope context
ZenBuilderremoves controllers from DI on disposal- Organized exports - internal details hidden
π Bug Fixes #
- Fixed
ZenBuildernot removing controllers from DI - Fixed module rollback leaving inconsistent state
- Fixed reactive exports including internals
- Fixed circular import issues
π Quick Migration #
- Replace
EagerRef/LazyRef/ControllerRefβRef - Replace
.put()/.asRef()βZen.put() - Replace
Zen.putFactory()βZen.putLazy(..., isPermanent: false) - Replace
Zen.debug*()βZenDebug.*()
β What Stays the Same #
All core features preserved: hierarchical scopes, lazy loading, tagged dependencies, modules, reactive system, workers, effects, testing, debugging.
0.6.3 #
π― Logging Improvements #
New Features
- New Environment:
ZenEnvironment.productionVerbose- warnings + errors with performance metrics - Smart Log Helpers:
ZenConfig.shouldLogRoutesandZenConfig.shouldLogNavigation - Better Log Levels: Controller lifecycle events now use appropriate levels (info vs debug)
Improvements
- Route/navigation logging now properly controlled by environment settings
- Log levels respect both flags AND global log level configuration
- Enhanced
toMap()includes all computed properties for debugging - Test environment uses longer disposal timeout (10s) for stability
0.6.2 #
Fixed #
- Log Level Filtering: Fixed inverted logic in
shouldLog()method that caused logs to appear even when log level was set to suppress them - Rx Tracking Logs: Rx widget tracking logs now properly respect
ZenConfig.enableRxTrackingflag instead of always showing in debug mode- Changed Obx widget debug logs to use
logRxTracking()for proper control - Debug mode now shows general debug logs but hides Rx tracking logs as documented
- Trace mode shows all logs including Rx tracking logs as documented
- Changed Obx widget debug logs to use
Improved #
- Log level configuration now works correctly across all environments (production, staging, development, debug, trace, test)
- Better separation between general debug logging and verbose Rx tracking logging
0.6.1 #
π― Comprehensive Logging System Enhancement #
Breaking Changes
- Replaced simple
enableDebugLogswith granularZenLogLevelenumZenLogLevel.none- No logging (silent)ZenLogLevel.error- Only errors (recommended for production)ZenLogLevel.warning- Errors and warnings (recommended for production)ZenLogLevel.info- General information (recommended for development)ZenLogLevel.debug- Detailed debug info (for development)ZenLogLevel.trace- Very verbose including internals (debugging only)
New Features
Type-Safe Environment Configuration
- Added
ZenEnvironmentenum for type-safe environment configuration - Prevents typos and provides IDE autocomplete
- Supports aliases: 'prod' β production, 'dev' β development, 'stage' β staging
- Backward compatible with string-based configuration
Available Environments:
ZenEnvironment.production- Minimal logging, no debug featuresZenEnvironment.staging- Moderate logging, performance metricsZenEnvironment.development- Detailed logging, all debug featuresZenEnvironment.debug- Very detailed logging with strict modeZenEnvironment.trace- Extreme verbosity including Rx trackingZenEnvironment.test- Optimized for testing (no auto-dispose)
Code Cleanup
- Removed all deprecated
ZenConfig.enableDebugLogschecks throughout codebase - Integrated
RxLoggerwithZenLoggerto respectZenConfig.logLevel - Simplified logging calls by removing redundant conditional checks
- Improved consistency between core and reactive logging systems
- All logging now properly respects the unified
ZenLogLevelsystem
0.6.0 #
π¨ BREAKING CHANGES #
- Lifecycle Standardization: Renamed lifecycle methods for consistency
ZenController.onDispose()βZenController.onClose()ZenService.onDelete()βZenService.onClose()
- API Consistency:
ZenScope.put()parameterpermanentβisPermanent
β¨ New Features #
- Automatic ZenService Disposal: Services are automatically disposed when their scope is disposed (promotes proper scope design)
- Enhanced ZenService Integration:
ZenScopenow matchesZenAPI behavior for services - Smart Defaults: ZenService instances default to permanent across all registration methods
π§ Improvements #
- Consistent lifecycle pattern:
onInit()βonClose()βdispose() - ZenService instances properly initialize from lazy factories
- Complete disposal coverage in all scope cleanup operations
π Migration Guide #
// Lifecycle methods
@override void onDispose() β @override void onClose()
@override void onDelete() β @override void onClose()
// Scope registration
scope.put(service, permanent: true) β scope.put(service, isPermanent: true)
π Internal Changes #
- Restructured ZenService disposal: Added internal
dispose()method that calls user'sonClose() - Improved separation of concerns: Clear distinction between user cleanup (
onClose()) and framework disposal (dispose()) - Updated all examples and documentation to use new lifecycle methods
- Enhanced error messages to reference correct method names
0.5.5 #
- π ZenService (longβlived services)
- Adds
ZenServicebase withonInitandonCloselifecycle hooks - Safe init:
isInitializedset only after successfulonInit - Guaranteed cleanup via
onDeleteβonClose
- Adds
-
π§© DI behavior and consistency
Zen.put(instance):ZenServicedefaults toisPermanent = trueand initializes via lifecycle managerZen.putLazy(factory): explicit permanence (defaultfalse); instance created on firstfind()Zen.putFactory(factory): unchanged; always creates new instancesZen.find(): autoβinitializesZenServiceon first access (covers lazy/scoped resolutions)
-
β Compatibility
- No changes to behavior
ZenController - Works across scopes and modules with consistent lifecycle handling
- No changes to behavior
-
π§ͺ Tests
- Added unit/integration tests for service init/disposal, lazy resolution, and error handling
-
π Docs
- Updated guidance on services vs controllers, permanence defaults, and initialization semantics
0.5.4 #
- π± Pub.dev Example Improvements
- Updated example application displayed on pub.flutter-io.cn package page
- Cleaner code structure and improved readability for new users
- Better demonstration of ZenView and reactive state patterns
0.5.3 #
- π Perfect pub.flutter-io.cn Package Score Achievement (160/160)
- Achieved maximum possible pub.flutter-io.cn score: 160/160 points
- Static Analysis (50/50): Fixed all linting issues and code formatting problems
- Documentation (10/10): Comprehensive README and API documentation maintained
- Example (30/30): Added complete example application demonstrating all features
- Maintenance (70/70): Up-to-date dependencies and Flutter compatibility
- Fixed code formatting issues across the entire codebase using
dart format - Added missing curly braces around single-line if statements for better code style
- Improved documentation comments formatting to prevent HTML interpretation warnings
- Enhanced code consistency by enforcing
curly_braces_in_flow_control_structuresrule - Updated analysis configuration to match pub.flutter-io.cn standards for optimal package quality
- Ensured example application meets pub.flutter-io.cn requirements for discoverability and usability
0.5.2 #
- π¦ Package Metadata Improvements
- Updated topics to use
hierarchical-dependency-injectionfor better discoverability - Improved SEO for dependency injection searches while highlighting hierarchical approach
- Enhanced pub.flutter-io.cn searchability and positioning
- Updated topics to use
0.5.1 #
- π Bug Fixes and Compatibility Improvements
- Fixed deprecated
RadioListTilegroupValueandonChangedparameters - Migrated to
RadioGroupwidget for radio button group management (Flutter 3.32.0+ compatibility) - Enhanced radio button implementation following Flutter's latest best practices
- Fixed deprecated
0.5.0 #
- π Official pub.flutter-io.cn Release
- Published Zenify to pub.flutter-io.cn as a stable pre-release package
- Updated installation instructions to use
zenify: ^0.5.0from pub.flutter-io.cn - Enhanced package description for better discoverability
- Added comprehensive pub.flutter-io.cn metadata (topics, platforms, documentation links)
- Prepared package for wider Flutter community adoption
0.4.1 #
- Documentation and Publishing Preparation
- Polish README.md with improved formatting and comprehensive content
- Enhance installation instructions and quick start guide
- Add comprehensive feature highlights and comparison guidance
- Refine documentation structure with "Coming Soon" sections for planned content
- Update community links and support channels
- Prepare package metadata for pub.flutter-io.cn publishing
- Code Quality and Performance Improvements
- Add
constkeyword for durations and widgets across files for consistency - Apply
constto widget declarations where applicable to reduce rebuilds - Fix minor typos in documentation paths from
docs/todoc/ - Improve code clarity and conformance with modern Dart guidelines
- Add
- Package Configuration Updates
- Refine
pubspec.yamldescription for better pub.flutter-io.cn presentation - Update Flutter SDK constraint for compatibility
- Adjust dependencies for optimal package setup
- Refine
0.4.0 #
- Major Enhancement: Complete Module System and Route Management
- BREAKING: Rename ZenModulePage to ZenRoute for clarity and better naming
- Implement comprehensive hierarchical module system with ZenModule base class
- Add ZenRoute widget for seamless module-based dependency injection
- Implement stack-based scope tracking for reliable parent resolution
- Add automatic scope cleanup and lifecycle management
- Implement smart auto-dispose defaults based on scope hierarchy
- Add comprehensive error handling with layout-aware loading/error states
- Implement ZenScopeStackTracker for hierarchical scope inheritance
- Add ZenScopeManager for centralized scope lifecycle management
- Implement proper Zen.currentScope synchronization throughout navigation
- Add comprehensive logging and debug support for scope operations
- Implement robust parent scope resolution with multiple fallback strategies
- Add comprehensive example applications (ecommerce, todo, showcase)
- Restructure documentation with complete guides and improved examples
- Add ZenConsumer widget for efficient dependency access with automatic caching
- Implement production-ready module registration and cleanup patterns
0.3.0 #
- Major Enhancement: Production-Ready Reactive System
- Complete reactive state management system with comprehensive error handling
- Add RxResult
- Implement RxException with timestamp tracking and error context
- Add RxComputed for automatic dependency tracking and computed values
- Implement RxFuture for reactive async operations with state management
- Add comprehensive error handling extensions for all reactive types
- Implement circuit breaker pattern for resilient reactive operations
- Add RxLogger with configurable error handling and context tracking
- Implement extensive list extensions with safe operations and error handling
- Add batch operations and bulk update support for collections
- Implement retry logic with configurable delays and attempt limits
- Add performance monitoring utilities and resource leak detection
- Implement comprehensive test coverage for all reactive components
- Add production-ready error configuration and logging systems
- Implement automatic dependency cleanup and memory management
- Add type-safe reactive operations with compile-time guarantees
0.2.0 #
- Major Enhancement: Widget System Expansion and Performance Optimization
- Add ZenConsumer widget for efficient dependency access with automatic caching
- Add comprehensive test suite for ZenConsumer widget functionality
- Enhance widget system documentation with complete comparison table
- Add examples demonstrating ZenConsumer for optional services and dependencies
- Improve README with detailed widget selection guidelines and best practices
- Add performance-optimized patterns for different UI scenarios
- Update migration guide with widget system improvements
0.1.9 #
- Enhanced Testing and Logging Infrastructure
- Add comprehensive memory leak detection test suite with tracking utilities
- Implement resource lifecycle monitoring for controllers, scopes, and services
- Add stress tests for rapid creation/disposal scenarios
- Implement dependency resolution benchmark suite for performance monitoring
- Add widget lifecycle tests with safe ZenView implementation patterns
- Enhance error handling in test teardown processes
- Add performance monitoring utilities with operations-per-second metrics
- Improve test coverage for module registration and cleanup
- Add hierarchical scope disposal verification tests
- Implement batch operations benchmarking for large-scale dependency management
0.1.8 #
- Major Enhancement: ZenView Integration and Widget System
- Add ZenView base class for automatic controller management in pages
- Implement direct controller access pattern (controller.property)
- Add ZenViewRegistry for controller lifecycle management
- Introduce context extensions for nested widget controller access
- Replace manual Zen.find() pattern with automatic binding
- Add comprehensive ZenView examples and patterns
- Improve error handling with clear controller availability messages
- Update documentation with ZenView best practices
- Add support for tagged controllers in ZenView
- Enhance type safety with automatic controller resolution
0.1.7 #
- Complete Phase 4: API Consistency and Reference System Improvements
- Rename
lookuptofindfor more intuitive API - Add
findOrNullmethod for non-throwing dependency lookup - Enhance reference system with
EagerRefandLazyRefimplementations - Improve error handling in ZenView for better debugging
- Refine scope management in widget integration
- Update examples to use new API methods
- Fix dependency resolution in hierarchical scopes
- Rename
0.1.6 #
- Complete Phase 3: Logging and Testing Improvements
- Replace print statements with structured ZenLogger system
- Add proper log levels (debug, warning, error) for better debugging
- Add comprehensive tests for dependency injection functionality
- Implement test helpers for isolated scope testing
- Add integration tests for scoped dependencies
- Improve error handling with descriptive messages
0.1.5 #
- Complete Phase 2: Dependency Management Improvements
- Implement hierarchical scope system for nested controller access
- Add circular dependency detection to prevent deadlocks
- Create module/binding system for organized dependency registration
- Enhance controller discovery with improved scoping
- Add lazy initialization support for dependencies
- Improve error reporting for dependency resolution issues
0.1.4 #
- Complete Phase 1: Enhanced Type Safety
- Add generic type constraints to all collections (RxList
- Implement typed provider references with ControllerRef
- Add compile-time type checking for controller dependencies
- Ensure type safety throughout reactive system and DI container
0.1.3 #
- Add ZenEffect for handling async operations with loading states
- Improve worker compatibility with proper RxNotifier types
- Fix type compatibility issues between RxInt and RxNotifier
- Add examples demonstrating async effects and reactive data flows
- Enhance documentation for state bridging patterns
0.1.2 #
- Update minimum Dart SDK to 2.19.0
- Fix deprecated IndexError usage with IndexError.withLength
- Improve logging system with developer.log instead of print statements
- Fix collection implementations for better type safety
- Add missing implementations in RxList, RxMap, and RxSet classes
0.1.1 #
- Initial release
- Core state management features
- Reactive state with Rx objects
- Controller lifecycle management
- Route-based controller disposal