mediatr 0.2.1
mediatr: ^0.2.1 copied to clipboard
Dart mediatr package. Central mediator that allows sending requests, and publishing events.
Dart mediator package #
Pure dart package. No dependencies in flutter can be run both in flutter and dart API's.
Inspired by https://github.com/jbogard/MediatR
Create and send a request #
/// Create the request
class AddRequest extends IRequest<int> {
final int i;
AddRequest(this.i);
}
/// Create a request handler
class AddRequestHandler extends IRequestHandler<AddRequest, int> {
@override
Future<int> call(AddRequest request) async {
return request.i + 1;
}
}
/// Register the handler to the mediator instance ( commonly stored as a singleton )
final mediator = Mediator(Pipeline());
mediator.registerHandler<AddRequest, int, AddRequestHandler>(
() => AddRequestHandler(),
);
/// Send the request through the mediator instance
final added = await mediator.send<AddRequest, int>(
AddRequest(2),
);
print(added); // prints 3
copied to clipboard
Publishing events #
/// create an event extending IDomainEvent
class MyEvent extends IDomainEvent {
@override
String get name => 'MyEvent';
}
mediator.publish<MyEvent>(MyEvent());
copied to clipboard
Subscribe on events with functions #
/// subscribe on mediator instance
var unsubscribeFunc = mediator.subscribeWithFunc<MyEvent>((event){
print(event.name);
});
/// call the func returned to unsubscribe
unsubscribeFunc();
copied to clipboard
Subscribe on events with a class instance #
class MyEventHandler extends IEventHandler<MyEvent> {
@override
Future<void> call(MyEvent event) {
print(event);
}
}
var eventHandler = MyEventHandler();
mediator.subscribe<MyEvent>(eventHandler);
/// call unsubscribe with the same instance to remove the handler.
mediator.unsubscribe<MyEvent>(eventHandler);
copied to clipboard
Adding a middleware for all requests #
class LoggingBehavior extends IPipelineBehavior {
@override
Future process(IRequest request, RequestHandlerDelegate next) {
print(request);
return next(request);
}
}
final mediator = Mediator(
Pipeline()
..addMiddleware(
LoggingBehavior(),
),
);
copied to clipboard