EventSubscription<TSourceBloc extends JuiceBloc<BlocState> , TSourceEvent extends EventBase, TLocalEvent extends EventBase> class
Subscribes to specific events from another bloc and executes a local use case.
EventSubscription enables loosely-coupled bloc-to-bloc communication by allowing a bloc to react to specific events emitted by another bloc, without needing to know the source bloc's state structure.
Unlike StateRelay / StatusRelay, which observe state changes, EventSubscription filters for specific event types, resulting in cleaner, more targeted inter-bloc communication.
The toEvent transformer isolates coupling - the subscribing bloc only needs to know about the source event structure, not the source state.
Type Parameters:
TSourceBloc- The bloc type to subscribe toTSourceEvent- The event type to listen for from the source blocTLocalEvent- The local event type to transform into and execute
Example:
class ProfileBloc extends JuiceBloc<ProfileState> {
ProfileBloc() : super(ProfileState(), [
// Subscribe to AuthBloc's LoginSuccessEvent
() => EventSubscription<AuthBloc, LoginSuccessEvent, LoadProfileEvent>(
toEvent: (e) => LoadProfileEvent(userId: e.userId),
useCaseGenerator: () => LoadProfileUseCase(),
),
], []);
}
- Implemented types
Constructors
-
EventSubscription({required TLocalEvent toEvent(TSourceEvent sourceEvent), required UseCaseGenerator useCaseGenerator, bool when(TSourceEvent event)?, Set<
Type> statusTypes = const {UpdatingStatus}, Object? scope, BlocDependencyResolver? resolver}) - Creates an EventSubscription.
Properties
- concurrency → EventConcurrency
-
How same-type events are processed relative to one another. Every
builder declares it; a mode is a decision, never a default.
no setteroverride
- eventType → Type
-
The type of event this use case handles.
no setteroverride
- generator → UseCaseGenerator
-
Creates the use case instance that will handle events.
no setteroverride
- hashCode → int
-
The hash code for this object.
no setterinherited
- initialEventBuilder → UseCaseEventBuilder?
-
Optional builder for creating an initial event when the bloc starts.
no setteroverride
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- scope → Object?
-
Optional scope key for resolving scoped bloc instances.
final
- sourceBlocType → Type
-
The source bloc type to subscribe to.
no setter
- sourceEventType → Type
-
The source event type this subscription listens for.
no setter
-
statusTypes
→ Set<
Type> -
Which status types to listen for.
Defaults to {UpdatingStatus} - only successful state updates.
final
- toEvent → TLocalEvent Function(TSourceEvent sourceEvent)
-
Transforms the source event to a local event type.
final
- useCaseGenerator → UseCaseGenerator
-
Creates the use case instance that handles the local event.
final
- when → bool Function(TSourceEvent event)?
-
Optional predicate to filter which source events trigger execution.
final
Methods
-
close(
) → Future< void> -
Cleanup method called when the use case is disposed.
override
-
initialize(
) → void - Initializes the subscription. Called by JuiceBloc at registration.
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
setEventHandler(
void handler(TLocalEvent event)) → void - Sets the callback for event dispatch. Called by JuiceBloc during registration.
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited