Events
Type-safe event system for decoupled inter-module communication.
Basic Usage
// Listen to events
events.on<UserData>('user/profile/updated', (context) {
print('Profile: ${context.data?.name}');
});
// Emit events
events.emit<UserData>('user/profile/updated', userData);
// Remove listener
events.deafen(listener);
Wildcard Patterns
Single segment wildcard (*
):
events.on<dynamic>('user/*/updated', (context) {
print('Updated: ${context.params[0]}'); // params[0] = matched segment
});
Global wildcard (#
):
events.on<dynamic>('user/#', (context) {
print('All segments: ${context.params}');
});
Event Chains
class UserEvents extends Segment {
UserEvents() : super('user');
}
final userEvents = UserEvents();
// Chain paths
userEvents.$('profile').$('avatar').emit<String>('url');
// Listen to chains
userEvents.$('profile').$('*').on<dynamic>((ctx) {
print(ctx.params[0]);
});
Retained Events
Events persist for late subscribers:
// Emit retained
events.emit<bool>('app/ready', true, true);
// Late subscriber receives it
events.on<bool>('app/ready', (ctx) {
print('Received: ${ctx.data}');
});