1

我已经创建了一个 Dart 控制台应用程序,并且需要处理来自标准输入的箭头键和功能键之类的键码?我见过的样本通常是基于字符串的:

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]}");
    }
}

似乎标准输入只提供可打印的字符,而不是所有的 ascii 键码。如果从标准输入无法实现,我可以使用键码在我的本机扩展程序中创建和加载流吗?我的控制台应用程序如何获取任何按键的 ascii 键码?谢谢你的帮助!

4

1 回答 1

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
看到从标准输入捕获字符而不等待按下回车以获取更多详细信息。您可以创建一个实现链接问题中建议的解决方案的本机扩展。

于 2014-07-23T05:15:22.907 回答