Dart:io stdin原始字符代码

时间:2014-07-23 00:46:32

标签: dart dart-native-extension

我创建了一个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密钥代码?谢谢你的帮助!

1 个答案:

答案 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。 您可以创建一个本机扩展,在链接的问题中实现建议的解决方案。