TGViewer
Flutter & Dart | Мобильный трудоголик Flutter & Dart | Мобильный трудоголик @hardworkerflutter · 405 subscribers
Post #90 493
👣 Как async* упрощает работу с потоками в Dart

В Dart есть инструмент, который многие недооценивают. Это оператор async*. Он позволяет создавать потоки данных так же легко, как обычные функции. Без лишних классов, ручного управления подписками и бесконечных циклов с обработчиками ошибок.


Что такое генераторы:

Генераторы - это функции, которые возвращают данные по частям, а не все сразу. Они позволяют экономить память и время выполнения. Но обычно такие функции синхронные. А что делать, если нужна асинхронность?

Здесь и вступает async*. Вместо Iterable такая функция возвращает Stream. Внутри нее доступны все возможности генератора плюс await.


Как это выглядит на практике:

Вот пример функции, которая генерирует числа с задержкой:


Stream<int> generateNumbers() async* {
for (var i = 0; i < 5; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}


Все просто. Мы используем привычные конструкции: цикл, await, yield. Никаких StreamController, никаких подписок, никаких ручных закрытий.


Что делает ключевое слово yield:

yield - это оператор, который возвращает очередное значение из генератора или асинхронного генератора. Когда функция помечена как async*, она не выполняется целиком сразу. Вместо этого она возвращает Stream. Каждый раз, когда выполнение доходит до yield, значение отправляется в поток и функция приостанавливается до следующего запроса.

Простыми словами: yield - это как return, но не завершает функцию, а отдает одно значение и ждет, когда попросят следующее. Функция продолжает работу с того же места, а не начинает заново.

Есть еще yield*, который передает управление другому генератору и отдает все его значения подряд. Это удобно, когда нужно объединить несколько источников данных в один поток.


🔗 Читать подробнее


💡 Вывод:

async* - это не просто синтаксический сахар. Это способ писать потоки данных чисто и предсказуемо. Он экономит код, упрощает чтение и делает логику более явной. Логика генерации данных находится в одном месте и выглядит как обычный код. Все, что связано с созданием потока, обработкой ошибок и закрытием, берет на себя язык.


Подписаться на канал:
➡️ Flutter & Dart | Мобильный трудоголик
  • 👍 6
  • ❤ 3
  • 🔥 1
  • 👀 1
More from @hardworkerflutter
  1. Sep 29, 2026👣 Как встроить Unity игру во Flutter приложение Flutter отлично справляется с интерфейсом…
  2. Sep 25, 2026👨‍💻 Гонка за самую мощную ИИ-модель подходит к концу? Последние несколько лет за развити…
  3. Sep 15, 2026👣 Влияет ли выбор state management на производительность Flutter? Можно ли ускорить Flutt…
  4. Sep 11, 2026👣 Плагин Flutter для VS Code обновился до версии 3.142.0 Вышло обновление плагина Flutter…
  5. Sep 8, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  6. Sep 1, 2026👣 Почему primary constructors в Dart сложнее, чем кажется В Dart 3.13 появилась фича, кот…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →