Dart:io stdin raw коды символов
Я создал консольное приложение Dart, и вам нужно обрабатывать коды клавиш, такие как клавиши со стрелками и функциональные клавиши из stdin? Примеры, которые я видел, обычно основаны на строках:
Stream readLine() => stdin.transform(UTF8.decoder).transform(new LineSplitter());
readLine().listen(processLine);
Я изменил приведенный выше пример, надеясь получить необработанные целые, например так:
Stream readInts() => stdin;
readInts().listen(processInts);
void processInts(List<int> kbinput) {
for (int i=0;i<kbinput.length;i++){
print ("kbinput:${kbinput[i]}");
}
}
Кажется, stdin предоставляет только печатаемые символы, а не все коды клавиш ascii. Если это невозможно с помощью stdin, могу ли я создать и загрузить поток внутри собственного расширения с помощью кодов клавиш? Как мое консольное приложение может получить коды клавиш ascii любого нажатия клавиши? Спасибо за вашу помощь!
1 ответ
Один из способов был бы
import 'dart:io' as io;
import 'dart:convert' show UTF8;
void main() {
io.stdin.echoMode = false;
var input;
while(input != 32) { // leave program with [Space][Enter]
input = io.stdin.readByteSync();
if(input != 10) print(input); // ignore [Enter]
}
io.stdin.echoMode = true;
}
но он возвращает значение только после нажатия Enter. За одно нажатие клавиши возвращается от одного до трех байтов.
Кажется, что не легко получить нажатие клавиши из консоли без нажатия Enter
см. Захват символов со стандартного ввода без ожидания нажатия клавиши Enter для получения более подробной информации. Вы можете создать собственное расширение, которое реализует предлагаемое решение в связанном вопросе.