Дарт: BroadcastStream сохраняет последнее состояние? - PullRequest
0 голосов
/ 12 февраля 2019

Я подключаюсь к устройству Bluetooth (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 голосов
/ 12 февраля 2019

https://pub.dartlang.org/documentation/rxdart/latest/rx/BehaviorSubject-class.html делает это

Специальный StreamController, который захватывает последний элемент, который был добавлен в контроллер, и испускает его как первый элемент для любого нового слушателя.

Эта тема позволяет отправлять данные, ошибки и выполненные события слушателю.Последний элемент, который был добавлен к теме, будет отправлен всем новым слушателям темы.После этого любые новые события будут соответствующим образом отправлены слушателям.Можно указать начальное значение, которое будет отправлено, если к предмету не было добавлено ни одного элемента.

По умолчанию BehaviorSubject является контроллером широковещательной передачи (или горячим) для выполнения контракта Rx Subject.,Это означает, что субъект stream может прослушиваться несколько раз.

...