我创建了一个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不可能,我可以创建&amp;使用密钥代码在我的原生扩展中加载流?我的控制台应用程序如何获得任何按键的ascii密钥代码?谢谢你的帮助!
答案 0 :(得分:0)
一种方法是
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 的情况下,从控制台获取击键似乎并不容易 有关详细信息,请参阅Capture characters from standard input without waiting for enter to be pressed。 您可以创建一个本机扩展,在链接的问题中实现建议的解决方案。