Класс Stream
Класс Stream представляет собой источник асинхронных данных.
В отличие от коллекций, которые хранят все элементы сразу,
поток выдает значения по мере их поступления.
Это может быть результат чтения файла, ответ от сервера
или события пользовательского интерфейса.
Чтобы начать получать данные из потока, необходимо
вызвать метод listen и передать ему функцию-обработчик.
Поток может быть одноразовым (single-subscription) или
широковещательным (broadcast), что определяет количество
возможных подписчиков.
Синтаксис
Stream<T> stream = Stream<T>.fromIterable(iterable);
stream.listen((T event) {
// обработка события
});
Пример
Давайте создадим поток из списка чисел и подпишемся на него, чтобы вывести каждое значение в консоль:
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
stream.listen((int value) {
print(value);
});
}
Результат выполнения кода:
1
2
3
4
5
Пример
Давайте создадим поток строк и применим к нему
преобразование с помощью метода map, чтобы
перевести каждую строку в верхний регистр:
void main()
{
Stream<String> stream = Stream.fromIterable(['abcde', '12345']);
Stream<String> upperStream = stream.map((String value) {
return value.toUpperCase();
});
upperStream.listen((String value) {
print(value);
});
}
Результат выполнения кода:
"ABCDE"
"12345"
Пример
Давайте отфильтруем поток чисел, оставив только четные значения,
используя метод where:
void main()
{
Stream<int> stream = Stream.fromIterable([1, 2, 3, 4, 5]);
Stream<int> evenStream = stream.where((int value) {
return value % 2 == 0;
});
evenStream.listen((int value) {
print(value);
});
}
Результат выполнения кода:
2
4