Метод pause
Метод pause класса StreamSubscription приостанавливает
получение событий из потока. После вызова этого метода
подписка перестаёт получать данные до тех пор, пока не будет
вызван метод resume. В первый необязательный параметр
можно передать функцию, которая будет вызвана при возобновлении
потока. Это удобно для синхронизации работы с данными.
Синтаксис
subscription.pause([Future resumeSignal])
Пример
Давайте создадим поток и приостановим его после первого события, а затем возобновим через некоторое время:
import 'dart:async';
void main()
{
StreamController<int> controller = StreamController<int>();
StreamSubscription<int> subscription = controller.stream.listen((int value) {
print('Received: $value');
});
controller.add(1);
subscription.pause();
Future.delayed(Duration(seconds: 1), () {
controller.add(2);
subscription.resume();
controller.add(3);
controller.close();
});
}
Результат выполнения кода:
"Received: 1"
"Received: 3"
Обратите внимание, что событие со значением 2 было
добавлено в поток во время паузы и не было обработано,
так как после возобновления подписка не получает
пропущенные события.
Пример
Давайте передадим в метод pause функцию обратного вызова,
которая сработает при возобновлении подписки:
import 'dart:async';
void main()
{
StreamController<int> controller = StreamController<int>();
StreamSubscription<int> subscription = controller.stream.listen((int value) {
print('Data: $value');
});
controller.add(1);
Completer<void> completer = Completer<void>();
subscription.pause(completer.future);
Future.delayed(Duration(seconds: 1), () {
print('Resuming...');
completer.complete();
controller.add(2);
controller.close();
});
}
Результат выполнения кода:
"Data: 1"
"Resuming..."
"Data: 2"
Смотрите также
-
класс
StreamSubscription,
который представляет подписку на поток -
метод
resume,
который возобновляет получение событий -
метод
cancel,
который отменяет подписку на поток -
метод
listen,
который создаёт подписку на поток