stdin.readByteSync недавно был добавлен в Dart.readByteSync - правильное поведение?
Использование stdin.readByteSync для ввода данных, я пытаюсь разрешить значение по умолчанию и если запись сделана оператором, чтобы очистить значение по умолчанию. Если запись не была сделана и нажата клавиша Enter, используется значение по умолчанию.
Однако, похоже, что терминал не отправляется на терминал до ввода символа новой строки. Поэтому, когда я делаю print() или stdout.write(), он задерживается до ввода новой строки.
Следовательно, когда оператор вводит первый символ для переопределения по умолчанию, значение по умолчанию не очищается. IE. По умолчанию «abc», введенные данные «xx», однако «xxc» отображается на экране после ввода «xx». «Проблема» заключается в том, что никакие «записи» на терминал не отправляются до ввода новой строки.
Хотя я могу найти альтернативный способ сделать это, я хотел бы знать, должно ли это работать или должно работать 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>
Спасибо, я проголосовал за это. Однако не следует ли readByteSync() «логически» возвращать байты по мере их ввода? Насколько я могу судить, можно использовать readLineSync(), потому что он появляется (для меня), что ничего не возвращается до ввода новой строки. –
Хотя для 'readByteSync()' было бы разумно немедленно возвращаться, это не поведение по умолчанию на любой платформе. Вот почему я хочу предоставить его как вариант/режим. –
Хорошо, спасибо за информацию и спасибо за добавление функций синхронизации консоли, они очень помогают. Сначала мне захотелось readLineSync(), поэтому я получил то, что отлично. Поскольку readByteSync() был там, я думал, что буду использовать его, следовательно, мой пост здесь. –