コマンドライン(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
はでありStream
、それらにはメソッドがありませんclose
。
私がやっていることは、変換されたストリームを閉じて(読み取り:サブスクライブを解除して)、生の(stdin)ストリームを開いたままにしておくことだと思います。
私は正しいですか?もしそうなら、どうすればstdin
プログラム終了時に基になるストリームを閉じることができますか?