【发布时间】:2015-03-02 04:26:26
【问题描述】:
尝试构建一个自定义 StreamTransformer 类,但是那里的许多示例似乎已经过时,并且在文档中找到的示例不是(某些类型语言可能会考虑的)作为一个类(找到这里:https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:async.StreamTransformer)。这似乎不是一种非常类似于 Dart 的处理方式,而更像是一种类似 Javascript 的方式(我使用 Dart 来避免这种方式)。
许多在线资源说这是您创建 StreamTransformer 的方式,但是在扩展它时会出错。
class exampleStreamTransformer extends StreamTransformer
{
//... (This won't work)
}
“实现”似乎是要走的路,以及实现所需的绑定功能:
class exampleStreamTransformer implements StreamTransformer
{
Stream bind(Stream stream)
{
//... (Go on to return new stream, etc)
}
}
我似乎找不到任何这种方式的例子,但我自己把一些东西放在一起(在我的 IDE 中被接受,但在运行时不被接受,当它尝试使用 pause 时出现空对象错误吸气剂):
class exampleStreamTransformer implements StreamTransformer
{
StreamController<String> _controller;
StreamSubscription<String> _subscription;
Stream bind(Stream stream)
{
_controller = new StreamController<String>(
onListen: ()
{
_subscription = stream.listen((data)
{
// Transform the data.
_controller.add(data);
},
onError: _controller.addError,
onDone: _controller.close,
cancelOnError: true); // Unsure how I'd pass this in?????
},
onPause: _subscription.pause,
onResume: _subscription.resume,
onCancel: _subscription.cancel,
sync: true
);
return _controller.stream;
}
}
希望以这种方式实现它,就像以“类型化”方式生成课程一样,非常感谢任何帮助,谢谢。
【问题讨论】:
-
我同意
StreamTransformer是一个不必要的类 - 它只包含一个函数,因此您可以在传递对象的任何地方传递该函数。如果现在添加到库中,它只是一个函数类型。
标签: stream dart transformer