stdin.readByteSync 最近被添加到 Dart 中。
使用 stdin.readByteSync 进行数据输入,我试图允许默认值,如果操作员进行了输入,则清除默认值。如果没有输入并且只按下输入,则使用默认值。
然而,似乎正在发生的是在输入换行符之前不会将终端输出发送到终端。因此,当我执行 print() 或 stdout.write() 时,它会延迟到输入换行符。
因此,当操作员输入第一个字符以覆盖默认值时,默认值不会被清除。IE。默认为“abc”,输入的数据为“xx”,但输入“xx”后屏幕上显示“xxc”。“问题”似乎是在输入换行符之前没有向终端发送“写入”。
虽然我可以找到另一种方法,但我想知道这是否是 readByteSync 应该或必须工作的方式。如果是这样,我会找到另一种方法来做我想做的事。
// 示例程序 //
import 'dart:io';
void main () {
int iInput;
List<int> lCharCodes = [];
print(""); print("");
String sDefault = "abc";
stdout.write ("Enter data : $sDefault\b\b\b");
while (iInput != 10) { // wait for newline
iInput = stdin.readByteSync();
if (iInput == 8 && lCharCodes.length > 0) { // bs
lCharCodes.removeLast();
} else if (iInput > 31) { // ascii printable char
lCharCodes.add(iInput);
if (lCharCodes.length == 1)
stdout.write (" \b\b\b\b chars cleared"); // clear line
print ("\nlCharCodes length = ${lCharCodes.length}");
}
}
print ("\nData entered = ${new String.fromCharCodes(lCharCodes).trim()}");
}
命令屏幕上的结果是:
c:\Users\Brian\dart-dev1\test\bin>dart testsync001.dart
Enter data : xxc
chars cleared
lCharCodes length = 1
lCharCodes length = 2
Data entered = xx
c:\Users\Brian\dart-dev1\test\bin>