РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
521 of 723 menu

Класс StreamController

Класс StreamController создает поток, которым можно управлять вручную. Он предоставляет методы для добавления данных в поток, добавления ошибок и закрытия потока. Конструктор класса принимает необязательный параметр onListen - функцию, которая вызывается при появлении первого слушателя, необязательный параметр onCancel - функцию, которая вызывается при отмене подписки, и необязательный параметр sync - флаг, определяющий синхронную или асинхронную доставку событий. Свойство stream возвращает поток, к которому можно подключиться через метод listen.

Синтаксис

StreamController<T> controller = StreamController<T>(); controller.stream controller.sink controller.add(value) controller.addError(error) controller.close()

Пример

Давайте создадим контроллер потока, добавим в него несколько значений и закроем поток:

import 'dart:async'; void main() { StreamController<int> controller = StreamController<int>(); controller.stream.listen( (int value) => print(value), onDone: () => print('done') ); controller.add(1); controller.add(2); controller.add(3); controller.close(); }

Результат выполнения кода:

1 2 3 "done"

Пример

Давайте добавим в поток ошибку и обработаем ее через параметр onError:

import 'dart:async'; void main() { StreamController<int> controller = StreamController<int>(); controller.stream.listen( (int value) => print(value), onError: (Object error) => print('error: $error'), onDone: () => print('done') ); controller.add(1); controller.addError('oops'); controller.add(2); controller.close(); }

Результат выполнения кода:

1 "error: oops" 2 "done"

Пример

Давайте создадим контроллер с параметром onListen, который выведет сообщение при подключении первого слушателя:

import 'dart:async'; void main() { StreamController<String> controller = StreamController<String>( onListen: () => print('listener attached') ); controller.stream.listen((String value) => print(value)); controller.add('abcde'); controller.close(); }

Результат выполнения кода:

"listener attached" "abcde"

Смотрите также

  • класс Stream,
    который представляет собой поток данных
  • метод add,
    который добавляет данные в поток
  • метод addError,
    который добавляет ошибку в поток
  • метод close,
    который закрывает поток
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить