我要求用户在我的命令行 (dart:io) 应用程序中输入。从用户那里得到答案后,我想退订Stream
. 然后,稍后,我可能想再听一次(但用不同的听众,所以pause()
不要resume()
帮助我)。
在启动时,我有这个:
cmdLine = stdin
.transform(new StringDecoder());
后来,当我想收集输入时:
cmdLineSubscription = cmdLine.listen((String line) {
try {
int optionNumber = int.parse(line);
if (optionNumber >= 1 && optionNumber <= choiceList.length) {
cmdLineSubscription.cancel();
completer.complete(choiceList[optionNumber - 1].hash);
} else {
throw new FormatException("Number outside the range.");
}
} on FormatException catch (e) {
print("Input a number between 1 and ${choiceList.length}, please.");
}
});
这按预期工作,但它stdin
在程序执行结束时保持打开状态。使用之前的 API,关闭stdin
就像调用stdin.close()
. 但是对于新的 API,stdin
is a Stream
,而那些没有该close
方法。
我认为我正在做的是关闭(阅读:取消订阅)转换后的流,但保持原始(stdin)流打开。
我对么?如果是这样,我如何stdin
在程序退出时关闭底层流?