process method

Future<void> process()

Implementation

Future<void> process() async {
  _processing = true;

  final delegate = delegates.first;

  late final Map<LogicalKey, KeyEvent> keyDown;
  // if batch is true, we treat any tick containing keydown/keyup for the same key as a keydown
  if (batch) {
    late final Map<LogicalKey, KeyEvent> keyUp = {};
    keyDown = {};

    for (final event in _events) {
      if (event is KeyEvent) {
        switch (event.type) {
          case KeyEventType.up:
            keyUp[event.logicalKey] = event;
          case KeyEventType.down:
            keyDown[event.logicalKey] = event;
        }
      }
    }
    for (final key in keyUp.keys) {
      _events.remove(keyDown[key]);
      _events.remove(keyUp[key]);
    }
  }

  await delegate.handle(_events.sublist(0));
  _events.clear();
  if (batch) {
    _events.addAll(keyDown.values);
  }

  _processing = false;
}