Введение в потоки в Dart
Асинхронный код часто отдает не одно значение, а
цепочку шагов с данными между ними. Поток
в dart:async - способ выдавать такие
значения по очереди: каждое следующее появляется,
когда потребитель готов его принять.
Поток не крутит цикл сам по себе на фоне. Код, который строит последовательность, выполняется, когда к потоку подключают чтение; до этого описание лежит без движения, как рецепт без повара.
Значение в поток кладут через готовый источник,
функцию async* с yield или
контроллер. Снаружи цепочку читают через
await for или listen - для
каждого элемента выполняется переданное действие.
Тип элемента задают в угловых скобках:
Stream<int> для чисел,
Stream<String> для строк. Один и тот
же набор операторов map, where
и take работает поверх любого
источника, если типы согласованы.