1
有了變化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
來轉換流。
我錯過了什麼嗎?
發佈您的代碼爲StreamController – Nathanial
不確定如果你的意思是我如何實例化它,它在主函數 –
雖然流控制器不是一個抽象類嗎? – Nathanial