mayr_events 2.1.1
mayr_events: ^2.1.1 copied to clipboard
A lightweight, expressive event and listener system for Dart, inspired by Laravel's event architecture.
2.1.0 #
π Bug Fixes #
- FIXED: Event dispatching now uses
event.runtimeTypeinstead of generic typeT- Fixes issue where events returned from methods with
MayrEventreturn type weren't dispatched correctly - Listeners now properly receive events regardless of the variable's static type
- Fixes issue where events returned from methods with
π Debug Mode #
- β
NEW:
MayrEvents.debugMode(bool)- Enable/disable debug output - β
Debug mode defaults to
truewhen assertions are enabled (debug builds) - β
Debug mode defaults to
falsein release builds - β
Debug logging for key actions:
fire,on,remove,removeAll,clear
Usage #
Debug Mode:
// Enable debug output
MayrEvents.debugMode(true);
// Fire events with debug logging
await MayrEvents.fire(UserEvent());
// Output: [MayrEvents] - Firing event UserEvent to 2 listener(s)
// Disable debug output (e.g., in production)
MayrEvents.debugMode(false);
Runtime Type Fix:
// This now works correctly!
MayrEvent getEvent(String key) {
return UserRegisteredEvent('user123', 'user@example.com');
}
final event = getEvent('user_registered'); // Type: MayrEvent
await MayrEvents.fire(event); // Correctly dispatches to UserRegisteredEvent listeners
2.0.0 #
π Complete API Redesign - Functional Approach #
- BREAKING: Removed class extension pattern - now uses functional API
- BREAKING:
MayrEventSetupcompletely removed - BREAKING: No more
MayrEvents.instance- use static methods directly - BREAKING: Pure Dart package (Flutter removed from tests/examples)
- β
NEW: Event-level hooks (
beforeHandle,shouldHandle,onError) - β NEW: Keyed handler system for better management
- β
NEW:
shouldHandlecallbacks for validation - β
NEW: Handler removal methods (
removeBeforeHandler, etc.) - β Simplified setup with function-based pattern
- β No class extension or boilerplate needed
- β Pure Dart - works in any Dart project
New API Pattern #
Setup:
void setupEvents() {
MayrEvents.on<UserEvent>(UserListener());
MayrEvents.beforeHandle('logger', (event, listener) async { });
MayrEvents.shouldHandle('validator', (event) => true);
}
Usage:
void main() {
setupEvents();
}
await MayrEvents.fire(UserEvent());
π Queued Listeners #
- β NEW: Queue system for background job processing
- β
NEW:
MayrEvents.setupQueue()for configuring queues - β NEW: Multiple named queues with fallback support
- β NEW: Automatic retry mechanism (configurable, max 30)
- β NEW: Configurable timeout per listener
- β NEW: Queue worker lifecycle management (auto-cleanup)
- β NEW: Mix queued and non-queued listeners
- β Comprehensive test coverage for queue functionality
- β Example demonstrating queue features
Listener Properties Added #
bool get queued- Enable background queue processingString? get queue- Specify target queue nameDuration get timeout- Job timeout duration (default: 60s)int get retries- Retry count on failure (default: 3, max: 30)
Usage #
void setupEvents() {
// Setup queues
MayrEvents.setupQueue(
fallbackQueue: 'default',
queues: ['emails', 'notifications'],
defaultTimeout: Duration(seconds: 60),
);
MayrEvents.on<OrderEvent>(ProcessOrderListener());
}
class ProcessOrderListener extends MayrListener<OrderEvent> {
@override
bool get queued => true;
@override
String get queue => 'orders';
@override
int get retries => 5;
@override
Future<void> handle(OrderEvent event) async {
// Process in background with automatic retry
}
}
Updated #
- Complete rewrite of
MayrEventsclass MayrEventbase class now supports optional hooks- Example converted to pure Dart console app
- All tests updated to use
package:test - Documentation completely rewritten
- Repository: https://github.com/MayR-Labs/dart_events
1.0.0 #
- π First stable release
- β
Complete event system implementation
MayrEvent- Base class for eventsMayrListener- Base class for event listenersMayrEvents- Singleton event bus for firing and managing eventsMayrEventSetup- Application-level configuration
- β
Production-ready features
- Async event handling
- Multiple listeners per event
- Once-only listeners
- Isolate support for CPU-intensive listeners
- Global hooks (beforeHandle, onError)
- Type-safe event/listener binding
- Comprehensive listener management API
- β Comprehensive test suite (672 lines, 12+ test scenarios)
- β
Extensive documentation
- Comprehensive dartdoc comments on all public APIs
- README with usage examples and quick start
- QUICKSTART.md - 5-minute tutorial
- API.md with complete API reference (450+ lines)
- TESTING.md with testing guidelines
- CONTRIBUTING.md with contribution guidelines (270+ lines)
- DESIGN.md with architecture details
- PROJECT_STRUCTURE.md - Code organization guide
- CHECKLIST.md - Production readiness verification
- β Working example Flutter application (314 lines)
- β MIT License
0.0.1 #
- Initial placeholder release