結論
streamは非同期的に使うのが主な使い方だが、複数のstreamを扱うにあたって同期的に同期的に値を流したい時もある
stream1を処理した後に、stream2を処理みたいな
そういう時は、await for
を使う
Future<int> getStreamInt(stream) async { var result; await for (final n in stream) { result = n; break; } return n; }
Blocでも使ってみる
これが活きるのがBlocを使ってる時
複数のBlocに対してEventを同期的に送信したい時とかに重宝する
以下はFlutter Blocを使った場合のコード
Future<int> getStreamInt(bloc) async { var result; await for (final n in bloc.stream) { result = n; break; } return n; }
注意点
blocの場合、2回連続同じstateはstreamに流れないようになっている。
そのため、期待したstreamの値がこなくて、永久にstreamを待ってしまうことがありうる
blocに関しては、待ち受ける時は値が変わることを確認すること