我正在连接到向我发送数据的蓝牙设备(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。 (我确定你们中的一个人对此案有一个简单的解决方案)
我基本上是在寻找广播流包装器以实现此行为。
答案 0 :(得分:0)
https://pub.dartlang.org/documentation/rxdart/latest/rx/BehaviorSubject-class.html做到了
一个特殊的StreamController,它捕获已添加到控制器中的最新项,并将其作为所有新侦听器的第一项发出。
该主题允许将数据,错误和完成的事件发送到 听众。已添加到主题的最新项目将是 发送给该主题的所有新听众。之后,任何新事件 将适当地发送给听众。可以提供 如果未添加任何项目,则将发出的种子值 主题。
默认情况下,BehaviorSubject是广播(又称热播)控制器,位于 为了履行Rx Subject合同。这意味着受试者的
stream
可以被收听多次。