新しい行に移動しないように、Dart の多くの場所で stdout.write() を使用しています。問題なく動作していましたが、最近同期から非同期に変更されました。Win7-32 および Win8-64 で Dart 28355 にアップグレードしました。
変更内容は次のとおりです。
「変更点は? stdout と stderr への書き込みは、すべてのプラットフォームでブロックされていました。クリーンアップの一環として、これは dart:io の他のストリームと同様に非同期/非ブロックになりました。コードを更新するにはどうすればよいですか? ほとんどのコード「exit」を呼び出すときのいくつかのケースを除いて、以前と同じように機能するはずです:"
私が達成したいことの小さな例は次のとおりです。
import 'dart:io';
main() {
String sCorrectYn;
while (sCorrectYn != "y") {
String sName = fInputString("Enter Name : ");
sCorrectYn = fInputString("Details Correct? (y/n) : ");
}
}
String fInputString(String sPrompt) {
stdout.write("\n$sPrompt");
return stdin.readLineSync().toLowerCase();
}
上記をwin8で実行したときの端末出力は次のとおりです。
c:\Users\boh\dart-dev1\testpg001>dart testinput001.dart
Enter Name : abcd
n
xxxx
n
zzzz
y
Details Correct? (y/n) :
Enter Name :
Details Correct? (y/n) :
Enter Name :
Details Correct? (y/n) :
c:\Users\boh\dart-dev1\testpg001>
上記で発生するのは、最終的に「y」を入力した後にすべての端末出力が表示されることです。これにより、プログラムが終了し、出力バッファーがフラッシュされます (表示されます)。最初の端末出力 "Enter Name : " は、発生すべきときに発生する唯一の出力です。
stdout には「フラッシュ」メソッドがないようです。
フューチャを使用して stdout を使用して実験しましたが、正しく機能させることができませんでした。
これを必要な方法で機能させるにはどうすればよいですか?
以下も、 stdout.write() を使用して必要に応じて機能しませんでした。
import 'dart:io';
main() {
String sInput;
stdout.write("\nEntry 1 : ");
sInput = stdin.readLineSync();
print("Date Entered (1) was : $sInput");
stdout.write("\nEntry 2 : ");
sInput = stdin.readLineSync();
print("Date Entered (2) was : $sInput");
stdout.write("\nEntry 3 : ");
sInput = stdin.readLineSync();
print("Date Entered (3) was : $sInput");
stdout.write("\nEntry 4 : ");
sInput = stdin.readLineSync();
print("Date Entered (4) was : $sInput");
stdout.write("\nEntry 5 : ");
sInput = stdin.readLineSync();
print("Date Entered (5) was : $sInput");
}
上記の端末表示は、最初の行を示しています "Entry 1 : " は、 stdout.write() を使用するときに必要な場合にのみ表示される行です。
c:\Users\boh\dart-dev1\testpg001>dart testinput003.dart
Entry 1 : aaa
Date Entered (1) was : aaa
bbb
Date Entered (2) was : bbb
ccc
Date Entered (3) was : ccc
ddd
Date Entered (4) was : ddd
eee
Date Entered (5) was : eee
Entry 2 :
Entry 3 :
Entry 4 :
Entry 5 :
c:\Users\boh\dart-dev1\testpg001>