Dart:BroadcastStream保持最后状态?

时间:2019-02-12 07:54:27

标签: dart stream

我正在连接到向我发送数据的蓝牙设备(ble)。因为我只能建立一个连接,但是我需要同时(在同一时间)在多个地方使用流,所以我认为广播流将是一个很好的解决方案。

广播的问题是,不保留项目。 (总的来说,我认为这不是一个好方法,因为非广播流会保留所有发出的内容...,这似乎是错误的)

要获得所需的行为,我正在这样做:

StreamGroup.merge([
      Future.value(_latestItemEmitted).asStream(),
      broadcast.stream
    ])
    .where((item) => item != null) // to avoid emitting null in the initial state of the `_lastItemEmitted`
    .distinct() // to avoid duplicates

这是可行的,但有一些缺点。

  • 我总是必须存储最后发出的物品。
  • 对于这种情况,将流分组似乎很奇怪。

我不想为此使用RxDart。 (我确定你们中的一个人对此案有一个简单的解决方案)

我基本上是在寻找广播流包装器以实现此行为。

1 个答案:

答案 0 :(得分:0)

https://pub.dartlang.org/documentation/rxdart/latest/rx/BehaviorSubject-class.html做到了

一个特殊的StreamController,它捕获已添加到控制器中的最新项,并将其作为所有新侦听器的第一项发出。

  

该主题允许将数据,错误和完成的事件发送到   听众。已添加到主题的最新项目将是   发送给该主题的所有新听众。之后,任何新事件   将适当地发送给听众。可以提供   如果未添加任何项目,则将发出的种子值   主题。

     

默认情况下,BehaviorSubject是广播(又称热播)控制器,位于   为了履行Rx Subject合同。这意味着受试者的   stream可以被收听多次。