Задачи на async в Dart. Часть 3
Создайте Stream из списка через Stream.fromIterable.
List<int> nums = [1, 2, 3, 4, 5];
Подпишитесь на Stream через listen и выведите каждое событие. Не забудьте отменить подписку через StreamSubscription.cancel() при необходимости.
Используйте await for для чтения Stream и соберите сумму всех чисел.
Преобразуйте Stream<int> через map: умножьте каждое значение на 10.
Отфильтруйте Stream через where: оставьте только чётные числа.
Соберите Stream в List через toList() и выведите результат.
Создайте StreamController<String>. Добавьте несколько событий через add, закройте контроллер через close() и прочитайте controller.stream через await for.
final controller = StreamController<String>();
controller.add('один');
controller.add('два');
await controller.close();
Сравните single-subscription и broadcast Stream: создайте обычный поток и asBroadcastStream() (или StreamController.broadcast()). Покажите, что на broadcast можно подписаться несколько раз, а на single-subscription — обычно один.
Напишите генератор Stream<String> ticks(int count) async*: каждую секунду через yield отдавайте строку 'tick N', где N — номер тика от 1 до count.
Итоговая задача на Stream: из списка строк создайте поток, отфильтруйте непустые, преобразуйте в верхний регистр через map и соберите в List.
List<String> words = ['dart', '', 'stream', ' ', 'async'];