Почему BroadcastStream не является типом в Dart? - PullRequest
0 голосов
/ 15 марта 2019

Это на самом деле серьезный вопрос.Насколько мне известно, способ создания BroadcastStream заключается в следующем:

StreamSubscription sc = StreamSubscription();
Stream s = Stream();
sc.addStream(s);
var bs = sc.stream.asBroadcastStream();  // this works
BroadcastStream bs = sc.stream.asBroadcastStream();  //  type error, undefined class BroadcastStream

Почему BroadcastStream не является типом, вместо того, чтобы использовать var?Есть ли на самом деле обоснование, это ошибка, или я что-то упустил?Спасибо.

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Широковещательный поток имеет тот же API, что и не вещательный поток, поэтому ему не нужен отдельный класс.

Способ создания широковещательного потока состоит в том, чтобы либо иметь широковещательный поток и использовать на нем любые операции преобразования потока (например, myBroadcastStream.map(...)), либо создать поток с нуля с помощью контроллера, var c = StreamController.broadcast(...);.

Вы можете проверить, является ли поток вещательным потоком, используя myStream.isBroadcast.

Вы можете видеть, что широковещательный поток - это скорее выбор поведения, стратегия, чем отдельный тип потока. Потоки могут вести себя по-разному, используя один и тот же API. В настоящее время у нас есть только два поведения, но было бы легко создать третье поведение, скажем, поток, который можно прослушивать более одного раза, но который не отправляет одни и те же события всем слушателям в одно и то же время (как итерация, которая можно использовать повторно).

1 голос
/ 15 марта 2019

Я не уверен, что была веская причина в любом случае, но в любом случае нет необходимости использовать var.

Stream bs = sc.stream.asBroadcastStream();

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

См. Также https://docs.flutter.io/flutter/dart-async/Stream/asBroadcastStream.html

...