Dart StreamクラスのeventTransformedコンストラクタについてメモ書き。
eventTransformedは受け取ったStreamイベントを加工して出力するコンストラクタ。
第1引数で生成元のStreamを渡し、第2引数でEventSink<T>クラスを渡す。
Sinkはデータの受け皿でパイプの役割を果たす。EventSinkは非同期用のイベントを処理する時に使用する。
EventSinkは抽象クラスなので、implementsで実装する必要がある。
EventSinkはdart:asyncライブラリに含まれている。FutureやStreamと違ってdart:coreで読み込まれていないため、実装時にimportする。
EventSinkでは実装時に以下3つのメソッドをオーバーライドする。
| メソッド | 説明 |
|---|---|
| add() | 受け取ったデータを加工してSinkに追加する。 |
| addError() | エラーをSinkに追加する。 |
| close() | Sinkを閉じる。 |
それではコーディングで動作を確認。
以下の例ではStreamで受け取った数値を2倍に加工し、リスナーに渡している。
import 'dart:async';
// EventSink<T>クラスを実装したMyEventSinkクラスを作成。
class MyEventSink implements EventSink<int> {
final EventSink<int> _outputSink;
MyEventSink(this._outputSink);
// データを加工してSinkに追加。
void add(int data) {
_outputSink.add(data * 2);
}
// エラー出力をSinkに追加。
void addError(Object error, [StackTrace? stackTrace]) {
_outputSink.addError(error, stackTrace);
}
// Sinkを閉じる。
void close() {
_outputSink.close();
}
}
void main() {
// 生成元のStreamを作成。
Dart Streamクラスの使い方:コンストラクタと主要メソッド解説マップ
📁 Dart Streamクラスの全体像・主要メソッド
Streamクラスのコンストラクタや主要メソッド一覧は、以下の解説マップをご覧ください。
➔ Dart Streamクラスの使い方:コンストラクタと主要メソッド解説マップ

コメント