streamController.add()和streamController.sink.add()有什么区别?

时间:2018-07-18 07:13:22

标签: dart flutter

我知道有两种方法可以将数据添加到streamcontroller中,一种是直接添加,另一种是通过使用接收器添加。我尝试阅读Sink的文档,但无法理解其概念,例如数据管道等。

1 个答案:

答案 0 :(得分:9)

什么都没有。这在内部做同样的事情。

.sink属性的真正目的是将其作为其他对象的参数传递。如:

MyClass(
  sink: myController.sink,
)

这可防止类访问其不应该访问的属性。

但是StreamController实现了Sink,这有什么意义呢?

是的。但是将StreamController强制转换为Sink不同于创建Sink

例如,使用Sink的类可以很好地执行以下操作:

StreamSink sink = StreamController();
if (sink is StreamController) { // this is true
    // access StreamController custom methods
}

此处的sink字段可以防止这种情况。转换为以下内容:

StreamSink sink = StreamController().sink;
if (sink is StreamController) { // false this time
   // never reached
}