一尘不染

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

flutter

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


阅读 578

收藏
2020-08-13

共1个答案

一尘不染

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

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

MyClass(
  sink: myController.sink,
)

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

但是StreamController实现Sink那么有什么意义呢?

好吧。但是强制转换StreamControllerSink创建强制转换不同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
}
2020-08-13