Ayush P Gupta
Ayush P Gupta

Reputation: 1549

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

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.

Upvotes: 56

Views: 7728

Answers (1)

Rémi Rousselet
Rémi Rousselet

Reputation: 277567

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
}

Upvotes: 87

Related Questions