Dart StreamクラスのtakeWhile()メソッドについてメモ書き。
takeWhile()は受信したStreamイベントをテストし、条件を満たしている間は受信したStreamイベントを返すメソッド。
条件は引数のtest関数で指定する。test関数の戻り値はbool型で、trueの場合は受け取ったStreamイベントを返し、falseになると終了する。
takeWhile()は上記以外にStreamからエラーを受け取ると終了する。この場合、受け取ったエラーが最後のStreamイベントとなる。
受信したStreamがブロードキャストの場合、takeWhile()はブロードキャストを返す。ただし、返されるStreamイベントはリッスンを返した時点からになる。
コーディングで動作確認。
void main() {
final stream = () async* {
for (int i = 0; i < 10; i++) {
if (i == 5) {
throw "Test Error";
}
yield i;
}
}();
stream.takeWhile((element) => element < 4).listen(
print,
onError: (e) {
print(e.toString());
},
);
}
実行結果。
Streamイベントが4より小さい間は条件を満たしているのでStreamイベントが返される。
0
1
2
3
次はi=5の時エラーを投げる。
void main() {
final stream = () async* {
for (int i = 0; i < 10; i++) {
if (i == 5) {
throw "Test Error";
}
yield i;
}
}();
stream.takeWhile((element) => element < 10).listen(
print,
onError: (e) {
print(e.toString());
},
);
}
実行結果。
受信したエラーが最後のSteamイベントとなる。
0
1
2
3
4
Test Error
コメント