Метод drain
Метод drain класса Stream подписывается на поток,
полностью его опустошает и возвращает объект Future,
который завершается, когда исходный поток закрывается.
Все события данных из потока при этом игнорируются.
В первый параметр мы передаем необязательное значение
futureValue, которое будет использовано как результат
завершения возвращаемого Future. Второй необязательный
параметр cancelOnError указывает, нужно ли отменить
подписку при первой ошибке потока.
Синтаксис
stream.drain([futureValue, cancelOnError])
Пример
Давайте создадим поток из списка чисел и опустошим его
с помощью метода drain:
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
stream.drain().then((_) {
print('Stream drained');
});
}
Результат выполнения кода:
"Stream drained"
Пример
Давайте передадим значение в первый параметр метода,
чтобы получить его в качестве результата Future:
void main()
{
Stream<String> stream = Stream.fromIterable(['a', 'b', 'c', 'd', 'e']);
stream.drain('done').then((res) {
print(res);
});
}
Результат выполнения кода:
"done"
Пример
Давайте опустошим поток и дождемся завершения
с помощью await:
void main() async
{
Stream<int> stream = Stream.periodic(
Duration(seconds: 1),
(int i) => i
).take(3);
await stream.drain();
print('All events ignored');
}
Результат выполнения кода:
"All events ignored"