への変更に伴い、 のStreamEventTransformer
ように動作するラッパー クラスを作成する必要がある StreamEventTransformer
ため、コードは次のとおりです。
class Transformer implements EventSink, StreamTransformer {
EventSink rootSink;
Transformer();
Transformer._useSink(this.rootSink);
void handleData(event, EventSink sink) {
print('inside handleData');
sink.add(event);
}
void handleError(error, StackTrace stackTrace, EventSink sink) =>
sink.addError(error, stackTrace);
void add(event) {
print('inside add');
handleData(event, rootSink);
}
void addError(error, [StackTrace stackTrace]) =>
handleError(error, stackTrace, rootSink);
void close() => rootSink.close();
Stream bind(Stream source) =>
new Stream.eventTransformed(source, (EventSink sink) {
EventSink eventSink = new Transformer._useSink(sink);
return eventSink;
});
}
このクラスではTransformer
、変更に適応するために拡張する必要があります。
しかし、私がそれを拡張すると:
class PlusOneTransformer extends Transformer {
void handleData(data, sink) {
sink.add(data + 1);
}
}
そしてそれをテストします:
void main() {
StreamController controller = new StreamController();
Stream stream = controller.stream.transform(new PlusOneTransformer());
stream.listen(print);
controller.add(10);
}
私は出力が次のようになることを期待しています:
inside add
11
代わりに:
inside add
inside handleData
10
したがって、オーバーライドされた を実行しているのではなくhandleData
、古いものを実行しています。デバッガーから、実行されたクラスがストリームの変換に使用されている間ではTransformer
ないことがわかります。PlusOneTransformer
PlusOneTransformer
何か不足していますか?