Поток абстрактный класс
Источник асинхронных событий данных.
Поток предоставляет способ получения последовательности событий. Каждое событие является либо событием данных, либо событием об ошибке, представляющим результат одного вычисления. Когда все события, предоставленные потоком, отправлены, одно событие "завершено" отметит конец.
Вы можете подписаться на поток, чтобы запустить генерацию событий и настроить слушателей, которые получают события. При подписке вы получаете объект StreamSubscription, который является активным объектом, предоставляющим события, и который может быть использован для прекращения подписки или временной приостановки событий от подписки.
Существует два типа потоков: потоки "с одной подпиской" и "вещательные" потоки.
Поток с одной подпиской позволяет только одному слушателю в течение всего срока службы потока. Он не начинает генерировать события до тех пор, пока у него нет слушателя, и он прекращает отправку событий, когда слушатель отписан, даже если источник событий все еще может предоставить больше.
Двойная подписка на поток с одной подпиской запрещена, даже после отмены первой подписки.
Потоки с одной подпиской обычно используются для потоковой передачи фрагментов больших непрерывных данных, таких как ввод-вывод файлов.
Вещательный поток позволяет любое количество слушателей, и он генерирует свои события, когда они готовы, независимо от наличия слушателей.
Вещательные потоки используются для независимых событий/наблюдателей.
Если несколько слушателей хотят подключаться к потоку с одной подпиской, используйте asBroadcastStream для создания вещательного потока на основе потока без вещания.
В любом типе потока преобразования потоков, такие как where и skip, возвращают тот же тип потока, что и тот, к которому был вызван метод, если не указано иное.
Когда событие срабатывает, слушатели в этот момент получат событие. Если слушатель добавляется к вещательному потоку во время генерации события, этот слушатель не получит текущее генерируемое событие. Если слушатель отменяется, он немедленно перестает получать события.
Когда срабатывает событие "завершено", подписчики отписываются перед получением события. После отправки события поток не имеет подписчиков. Добавление новых подписчиков к вещательному потоку после этого момента разрешено, но они просто получат новое событие "завершено" как можно скорее.
Подписки на потоки всегда учитывают запросы на "паузу". При необходимости они должны буферизовать свой вход, но часто, и предпочтительнее, они могут просто запросить паузу своего ввода.
Предполагаемая реализация isBroadcast возвращает false. Вещательный поток, унаследованный от Stream, должен переопределить isBroadcast для возврата true.
- Реализуется
Конструкторы
- Stream()
- Stream.empty() constfactory
-
Создаёт пустой вещательный поток.
- Stream.eventTransformed(Stream source, EventSink mapSink(EventSink<T> sink)) factory
-
Создаёт поток, где все события существующего потока передаются через преобразование sink.
- Stream.fromFuture(Future<T> future) factory
-
Создаёт новый поток с одной подпиской из будущего.
- Stream.fromFutures(Iterable<Future<T>> futures) factory
-
Создаёт поток из группы будущих значений.
- Stream.fromIterable(Iterable<T> data) factory
-
Создаёт поток с одной подпиской, получающий данные из
data. - Stream.periodic(Duration period, [ T computation(int computationCount) ]) factory
-
Создаёт поток, который повторяюще отправляет события через
periodинтервалы.
Свойства
- first → Future<T> только для чтения
-
Возвращает первый элемент потока.
- isBroadcast → bool только для чтения
-
Является ли этот поток вещательным потоком.
- isEmpty → Future<bool> только для чтения
-
Отчитывается, содержит ли этот поток какие-либо элементы.
- last → Future<T> только для чтения
-
Возвращает последний элемент потока.
- length → Future<int> только для чтения
-
Считает элементы в потоке.
- single → Future<T> только для чтения
-
Возвращает единственный элемент.
- hashCode → int только для чтения, унаследованно
-
Хеш-код для этого объекта.
- runtimeType → Type только для чтения, унаследованно
-
Представление runtime типа объекта.
Операторы
- operator ==(
other) → bool унаследованно -
Оператор равенства.
Методы
- any(
bool test(T element)) → Future<bool> -
Проверяет, принимает ли
testлюбой элемент, предоставляемый этим потоком. - asBroadcastStream(
{void onListen(StreamSubscription<T> subscription), void onCancel(StreamSubscription<T> subscription) }) → Stream<T> -
Возвращает поток с множественным подписками, производящий те же события, что и этот.
- asyncExpand<E>(
Stream<E> convert(T event)) → Stream<E> -
Создаёт новый поток с событиями потока на каждый исходный.
- asyncMap<E>(
dynamic convert(T event)) → Stream<E> -
Создаёт новый поток, в котором каждое событие данных этого потока асинхронно отображается на новое событие.
- contains(
Object needle) → Future<bool> -
Проверяет, встречается ли
needleв элементах, предоставляемых этим потоком. - distinct(
[bool equals(T previous, T next) ]) → Stream<T> -
Пропускает события данных, если они равны предыдущему событию данных.
- drain<E>(
[E futureValue ]) → Future<E> -
Отбрасывает все данные в потоке, но сигнализирует, когда он завершён или произошла ошибка.
- elementAt(
int index) → Future<T> -
Возвращает значение
index-го события данных этого потока. - every(
bool test(T element)) → Future<bool> -
Проверяет, принимает ли
testвсе элементы, предоставляемые этим потоком. - expand<S>(
Iterable<S> convert(T value)) → Stream<S> -
Создаёт новый поток из этого потока, преобразующий каждый элемент в ноль или более событий.
- firstWhere(
bool test(T element), { Object defaultValue() }) → Future -
Ищет первый элемент этого потока, соответствующий
test. - fold<S>(
S initialValue, S combine(S previous, T element)) → Future<S> -
Сводит последовательность значений, многократно применяя
combine. - forEach(
void action(T element)) → Future -
Выполняет
actionдля каждого события данных потока. - handleError(
Function onError, { bool test(error) }) → Stream<T> -
Создаёт обёртку Stream, которая перехватывает некоторые ошибки из этого потока.
- join(
[String separator = "" ]) → Future<String> -
Собирает строку представлений строк событий данных.
- lastWhere(
bool test(T element), { Object defaultValue() }) → Future -
Находит последний элемент в этом потоке, соответствующий
test. - listen(
void onData(T event), { Function onError, void onDone(), bool cancelOnError }) → StreamSubscription<T> -
Добавляет подписку на этот поток.
- map<S>(
S convert(T event)) → Stream<S> -
Создаёт новый поток, преобразующий каждый элемент этого потока в новое значение с помощью функции
convert. - pipe(
StreamConsumer<T> streamConsumer) → Future -
Перенаправляет события этого потока в
streamConsumer. - reduce(
T combine(T previous, T element)) → Future<T> -
Сводит последовательность значений, многократно применяя
combine. - singleWhere(
bool test(T element)) → Future<T> -
Находит единственный элемент в этом потоке, соответствующий
test. - skip(
int count) → Stream<T> -
Пропускает первые
countсобытий данных из этого потока. - skipWhile(
bool test(T element)) → Stream<T> -
Пропускает события данных из этого потока, пока они соответствуют
test. - take(
int count) → Stream<T> -
Предоставляет не более первых
countсобытий данных этого потока. - takeWhile(
bool test(T element)) → Stream<T> -
Передаёт события данных, пока
testуспешно. - timeout(
Duration timeLimit, { void onTimeout(EventSink<T> sink) }) → Stream<T> -
Создаёт новый поток с теми же событиями, что и этот поток.
- toList(
) → Future<List<T>> -
Собирает данные этого потока в List.
- toSet(
) → Future<Set<T>> -
Собирает данные этого потока в Set.
- transform<S>(
StreamTransformer<T, S> streamTransformer) → Stream<S> -
Подключает этот поток как вход для предоставленного StreamTransformer.
- where(
bool test(T event)) → Stream<T> -
Создаёт новый поток из этого потока, отбрасывая некоторые события данных.
- noSuchMethod(
Invocation invocation) → dynamic inherited -
Вызывается при попытке обратиться к несуществующему методу или свойству.
- toString(
) → String inherited -
Возвращает строковое представление этого объекта.
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/Stream-class.html