Класс StreamSubscription
Класс StreamSubscription представляет собой объект подписки
на поток данных Stream. Когда вы вызываете метод listen
у потока, он возвращает экземпляр StreamSubscription,
через который можно управлять этой подпиской. С его помощью
можно приостановить получение событий методом pause,
возобновить их методом resume и полностью прекратить
подписку методом cancel. Также подписка хранит информацию
о текущем состоянии и позволяет задать обработчики событий,
ошибок и завершения потока.
Синтаксис
StreamSubscription<T> subscription = stream.listen(
(T event) { },
onError: (Object error) { },
onDone: () { }
);
Пример
Давайте создадим поток из списка чисел, подпишемся на него и получим объект подписки, а затем выведем все элементы:
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
StreamSubscription<int> subscription = stream.listen(
(int event) {
print(event);
}
);
}
Результат выполнения кода:
1
2
3
4
5
Пример
Давайте приостановим подписку после первого события, а затем возобновим её:
import 'dart:async';
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
late StreamSubscription<int> subscription;
subscription = stream.listen(
(int event) {
print(event);
if (event == 1) {
subscription.pause();
Future.delayed(Duration(seconds: 1), () {
subscription.resume();
});
}
}
);
}
Результат выполнения кода:
1
2
3
4
5
Пример
Давайте отменим подписку после получения третьего элемента:
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
StreamSubscription<int> subscription = stream.listen(
(int event) {
print(event);
if (event == 3) {
subscription.cancel();
}
}
);
}
Результат выполнения кода:
1
2
3