Flutter中Sink和Stream有什么区别?

Ton*_*Joe 12 stream dart flutter

关于Flutter 的Google I/O 2018 视频介绍了如何使用Dart流来管理Flutter应用程序中的状态.该发言者谈到了使用Sink输入流和Stream输出流.Sink和之间有什么区别Stream?我搜索了文档,但它没有说太多的谢谢.

Abi*_*bin 30

我将尝试用一个简单的例子来解释,因为从那时起它很容易理解.

Sink并且Streams都是流控制器的一部分.您可以将数据添加到流控制器,使用sink该数据可以通过该控制器进行监听stream

例:

  final _user = StreamController<User>();
  Sink get updateUser => _user.sink;
  Stream<User> get user => _user.stream;
Run Code Online (Sandbox Code Playgroud)

用法:

  updateUser.add(yourUserObject); // This will add data to the stream.
  user.listen((user) => print(user)); // Whenever a data is added to the stream via sink, it will be emitted which can be listened using the listen method.
Run Code Online (Sandbox Code Playgroud)

您可以在发出流之前执行各种操作.transformmethod是一个示例,可用于在输入数据发出之前对其进行转换.

  • StreamController.sink.add() 和streamController.add() 之间有什么区别吗? (4认同)
  • 非常感谢您的示例和解释。对我来说,这比公认的答案要清楚得多。:) (2认同)

小智 10

如果您正在寻找有关流和接收器的非常基本的定义,请参考:

- 传送带称为流

StreamController - 这是控制流的东西

StreamTransformer - 这是处理输入数据的地方

StreamBuilder - 它是一种将流作为输入并为我们提供一个构建器的方法,该构建器在每次有流的新值时重建

sink - 接受输入的属性

stream - 提供 Stream 输出的属性

更多详情请参考这篇文章


Gün*_*uer 6

A StreamSink是一个StreamConsumer,表示它可以接收多个流(由添加addStream),并处理这些流发出的事件。

如果是的StreamSinkStreamController则添加的流中的所有事件均由所创建的流发出StreamController

这样,您可以将一个或多个流传输(转发)到另一流中。

  • 换句话说,“接收器”是对可以放入数据的对象的抽象。它没有说明数据的用途。在许多情况下,您无需创建接收器,只需将值直接传递给需要它的函数即可,但是有时您想进行概括。例如,StringSink是一个由StringBuffer和HttpResponse实现的接口,因为您可以向它们都写入字符串。同样,“ StreamSink”是由StreamController和HttpResponse两者实现的接口,因为您可以同时向两者添加流。 (5认同)
  • 我很确定这不会回答他的问题。 (3认同)
  • 我认为最好解释一下它们各自是什么以及它们的用途。当我自己开始飞镖时,我很难理解什么是“水槽”。 (3认同)
  • 这里不是解释streams和sink的区别,而是讨论如何使用它们。 (2认同)