event_bus_arch 1.3.0+8 copy "event_bus_arch: ^1.3.0+8" to clipboard
event_bus_arch: ^1.3.0+8 copied to clipboard

outdated

This package is a part of Event-driven architecture providing sending, listening, processing and receiving the events.

example/event_bus_arch_example.dart

import 'dart:async';

import 'package:event_bus_arch/event_bus_arch.dart';

class TestEventHandlerGroup implements EventBusHandlersGroup {
  EventBusHandler? _bus;
  @override
  // TODO: implement isConnected
  bool get isConnected => _bus != null;
  @override
  void connect(EventBusHandler bus) {
    _bus = bus;
    bus.addHandler<int>(plusNoEmit, eventName: 'no_emit');
    bus.addHandler<int>(plusEmit, eventName: 'emit');
  }

  @override
  void disconnect(EventBusHandler bus) {
    // TODO: implement disconnect
  }
  Future<void> plusNoEmit(EventDTO<int> event, EventEmitter<EventDTO<int>>? emit,
      {EventBus? bus, Completer? needComplete}) async {
    print('plusNoEmit: ${event.data + 1}');
  }

  Future<void> plusEmit(EventDTO<int> event, EventEmitter<EventDTO<int>>? emit,
      {EventBus? bus, Completer? needComplete}) async {
    var e = event.copy(data: event.data + 1);
    print('plusEmit: ${e.data}');
    emit?.call(e);
  }
}

Future<void> externPlusEmit(EventDTO<int> event, EventEmitter<EventDTO<int>>? emit,
    {EventBus? bus, Completer? needComplete}) async {
  var e = event.copy(data: event.data + 1);
  print('Extern plusEmit: ${e.data}');
  emit?.call(e);
}

Future<void> externPlusComplete(EventDTO<int> event, EventEmitter<EventDTO<int>>? emit,
    {EventBus? bus, Completer? needComplete}) async {
  var i = event.data + 1;
  var e = event.copy(data: i);
  print('Extern Complete plusEmit: ${e.data}');
  needComplete?.complete(i);
  emit?.call(e);
}

Future<void> main() async {
  //You can create many bus with prefix. Use for example, prefix for layer divider
  var appEBus = EventController(
    prefix: 'app',
    defaultHandler: (event, emit, {bus, needComplete}) async {
      print('App Def Event ${event.topic} uuid:${event.uuid} data:${event.data}');
      emit?.call(event);
    },
  );
  appEBus.addHandler(externPlusEmit, eventName: 'no emit');
  appEBus.addHandler(externPlusComplete);
  var r = await appEBus.call(1);
  try {
    r = await appEBus.call(1, eventName: 'no emit');
  } catch (e) {
    print(e);
  }

  appEBus.connect(TestEventHandlerGroup());

  var serviceEBus = EventController(
    prefix: 'service',
    // defaultHandler: (event, emit, {bus}) async {
    //   print('Service Def Event ${event.topic} uuid:${event.uuid} data:${event.data}');
    //   emit?.call(event);
    // },
  );
  serviceEBus.connect(TestEventHandlerGroup());
  //This Event no arrive to listener because no emit call
  appEBus.listenEvent<int>(eventName: 'no_emit')!.listen((event) {
    print('App Event no_emit data:$event');
  });
  serviceEBus.listenEvent<int>(eventName: 'emit')!.listen((event) {
    print('Service Event no_emit data:$event');
  });
  //This event have listener but handler no emit event
  EventBusMaster.instance.send(10, eventName: 'no_emit', prefix: 'app');
  //This event no have listener
  EventBusMaster.instance.send(20, eventName: 'emit', prefix: 'app');
  EventBusMaster.instance.send(30, eventName: 'no_emit', prefix: 'service');
  EventBusMaster.instance.send(40, eventName: 'emit', prefix: 'service');
  await Future.delayed(Duration(seconds: 1));
  //You can use only type for event
  //This event <String> not have special handler and controller use default handler
  var la = appEBus.listenEvent<String>()!.listen((event) {
    print('App Get Event $event');
  });
  var ls = serviceEBus.listenEvent<String>()!.listen((event) {
    print('Service Get Event $event');
  });
  // var ls1 = serviceEBus.listenEvent<String>()!.listen((event) {
  //   print('Service2 Get Event $event');
  // });
  appEBus.send<String>('Yhohohoh before server Yhooo');
  appEBus.send<String>('Yhohohoh after server Yhooo', afterEvent: serviceEBus.listenEvent<String>());
  appEBus.send<String>('Yhohohoh after 2 sec', afterTime: Duration(seconds: 2));
  serviceEBus.send<String>('Yhohohoh');
  await Future.delayed(Duration(seconds: 1));
  serviceEBus.send<String>('Yhohohoh111');
  appEBus.send(1111);
  appEBus.clearNotUseListeners();
  await Future.delayed(Duration(seconds: 1));
  ls.cancel();
  serviceEBus.send<String>('Yhohohoh');
  await Future.delayed(Duration(seconds: 1));

  //------ model controller
  EventModelController modelControler = EventModelController(prefix: 'model');
  modelControler.send<int>(10);
  modelControler.send('save this string');
  await Future.delayed(Duration(seconds: 1));
  print('Model String ${modelControler.lastEvent<String>()}');
  print('Model int ${modelControler.lastEvent<int>()}');
}
3
likes
0
points
154
downloads

Publisher

unverified uploader

Weekly Downloads

This package is a part of Event-driven architecture providing sending, listening, processing and receiving the events.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

intl, uuid

More

Packages that depend on event_bus_arch