Несколько вариантов приходят на ум. Во-первых, вы можете использовать takeWhile()
установить «сделано» условие:
new StringDecoder().bind(stdin)
.takeWhile((s) => s.trim() != 'exit')
.listen((sInput) {
Это будет использовать тот же самый onDone
обработчик (если он установлен), когда пользователь вводит EOF
характер или типы exit
с последующим нажатием клавиши ввода. Вы можете иметь больше гибкости отмены подписки с cancel()
:
void main() {
stdout.write("Enter Data : ");
var sub;
sub = new StringDecoder().bind(stdin).listen((String sInput) {
if (sInput.trim() == 'exit' || sInput.trim() == 'bye')
sub.cancel();
// Do something with sInput ............
});
Отмена подписки не закрывает поток, так что любой onDone
обработчик не вызывается.
Конечно, если вам нечего делать, вы всегда можете завершить с помощью exit(0)
[1].
, когда вы говорите «не хорошо», что вы имеете в виду? – jdigital
@jdigital. Я просто хочу, чтобы «оператор» ударил «enter», а затем использовал введенные данные. –
Взгляните на эту статью: http://stackoverflow.com/questions/15440138/how-to-read-console-input-on-m3-dart – jdigital