对于终端输入显示以下或类似,但是用ctl-d终止输入并不好。还有另一种退出这种“循环”的方法吗?
import "dart:io";
void main() {
stdout.write("Enter Data : ");
new StringDecoder().bind(stdin).listen((String sInput){});
//// Do something with sInput ............
}
答案 0 :(得分:1)
使用dart时可以通过运行exit
方法终止飞镖程序:io
void exit(int status)
Exit the Dart VM process immediately with the given status code.
This does not wait for any asynchronous operations to terminate.
Using exit is therefore very likely to lose data.
该代码将在listen
答案 1 :(得分:1)
我想到了一些选择。首先,您可以使用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 ............
});
取消订阅不会关闭Stream,因此不会调用任何onDone
处理程序。
当然,如果您还有其他事情要做,您可以随时使用exit(0)
[1]终止。