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

后端 未结 1 1789
借酒劲吻你
借酒劲吻你 2020-12-18 19:23

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 con

1条回答
  •  佛祖请我去吃肉
    2020-12-18 19:47

    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
    }
    

    0 讨论(0)
提交回复
热议问题