dart:asyncライブラリは他の多くのDart APIにとって重要な二つの型、StreamとFutureクラスを含んでいます。Futureクラスは一つの計算の結果を表し、Streamクラスは複数の計算の結果を表します。streamをlistenすることで結果(データ、あるいはエラーの両方)が届いたことの通知を受けます。listen中にポーズ(一時停止)することもできますし、streamが完了する前にlistenを止めることもできます。
この記事ではstreamの使い方に関しての記事ではありません。streamの作り方に関しての記事です。streamを作るためにはいくつかの方法があります。
- 既存のstreamを変換する。
- async*関数(ジェネレータ関数)を用いて一からstreamを作る。
- StreamControllerインスタンスを用いてstreamを作る。
この記事ではそれぞれのアプローチのサンプルコードを示します。
Transforming an existing stream
一般的なstreamの作り方は、すでにあるstreamのイベントを基にして新しい別のstreamを作る方法です。例えば、入力をUTF-8デコーディングして、既にある「bytesのstream」を「文字列のstream」に変換したいとします。最も一般的なアプローチは、オリジナルのstreamの各イベントの結果を待って新しいイベントを出力する新しいstreamを作ることです。
sample1
/// Splits a stream of consecutive strings into lines. /// /// The input string is provided in smaller chunks through /// the `source` stream. Stream<String> lines(Stream<String> source)…