对于终端输入显示了以下或类似的内容,但是使用 ctl-d 终止输入并不好。还有另一种方法可以退出这个“循环”吗?
import "dart:io";
void main() {
stdout.write("Enter Data : ");
new StringDecoder().bind(stdin).listen((String sInput){});
//// Do something with sInput ............
}
exit
您可以在使用 dart:io 时通过运行该方法来终止 dart 程序
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
我想到了几个选项。首先,您可以使用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 ] 结束。