mediatr 0.2.1 copy "mediatr: ^0.2.1" to clipboard
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

Publishing events #

/// create an event extending IDomainEvent
class MyEvent extends IDomainEvent {
  @override
  String get name => 'MyEvent';
}

mediator.publish<MyEvent>(MyEvent());

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();

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);

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(),
    ),
);
7
likes
140
pub points
55%
popularity

Publisher

unverified uploader

Dart mediatr package. Central mediator that allows sending requests, and publishing events.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (LICENSE)

More

Packages that depend on mediatr