What is the difference between streamController.add() and streamController.sink.add()?
Asked Answered
J

1

55

There are two ways that i know to add data to streamcontroller, one directly and other by use of a sink. I tried to read docs of Sink but i am not able to understand its concept like piping of data etc.

Jonijonie answered 18/7, 2018 at 7:13 Comment(0)
M
85

Nothing. This does the same thing internally.

The real purpose of .sink property is to pass it as parameter of other object. Such as :

MyClass(
  sink: myController.sink,
)

This prevents classes to access to properties they shouldn't be able to.

But StreamController implements Sink so what's the point ?

Well true. But casting StreamController to Sink is different than creating a Sink.

For example, the class that uses Sink could very well do the following :

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

The sink field is here to prevent this. It translates into the following :

StreamSink sink = StreamController().sink;
if (sink is StreamController) { // false this time
   // never reached
}
Maciemaciel answered 18/7, 2018 at 8:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.