listenToKeystrokes method
listens to keystrokes
Implementation
Stream<void>? listenToKeystrokes({
required Event onExit,
required Event onEscape,
Map<String, Event>? customStrokes,
}) {
if (!stdin.hasTerminal) {
return null;
}
stdin
..lineMode = false
..echoMode = false;
_stream ??= stdin.asBroadcastStream();
final strokes = {
'q': onExit,
// escape key
0x1b: onEscape,
...?customStrokes,
};
return _stream!.asyncMap((event) {
if (event.isEmpty) return;
logger.detail('Received keyboard event: $event');
final key = utf8.decode(event);
logger.detail('Key pressed: $key');
final stroke =
strokes[key] ?? strokes[key.toLowerCase()] ?? strokes[event.first];
stroke?.call();
return;
});
}