Criar streams com async*
Produza eventos a partir de um gerador.
Criar streams com async* é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Dart Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Dart Academy inclui 4 aulas no total.
Produzindo seus próprios fluxos
Até agora, você consumiu fluxos criados por outras pessoas. Agora, você os produzirá usando um gerador async, a maneira mais simples de emitir eventos.
A palavra-chave async*
Marque uma função como async* para transformá-la em um gerador de fluxo. Seu tipo de retorno é um Stream, e ela pode emitir valores ao longo do tempo. 🚿
Stream<int> countTo(int n) async* {
// body uses yield
}yield emite um valor
Dentro de uma função async*, yield envia um valor para o fluxo. A execução é pausada nesse ponto até que o ouvinte esteja pronto para receber mais valores.
Stream<int> oneTwo() async* {
yield 1;
yield 2;
}yield em um laço
Combine yield com um laço para emitir muitos valores. Cada passagem envia automaticamente o próximo número para o fluxo.
Stream<int> countTo(int n) async* {
for (var i = 1; i <= n; i++) yield i;
}await dentro de async*
Como a função é assíncrona, você pode usar await entre os yields. Isso permite buscar dados ou fazer uma pausa antes de emitir o próximo evento.
Stream<int> ticker() async* {
while (true) {
await Future.delayed(Duration(seconds: 1));
yield DateTime.now().second;
}
}yield* encaminha um fluxo
Use yield* para emitir, dentro do seu gerador, todos os eventos de outro fluxo. Ele incorpora esse fluxo inteiro ao seu.
Stream<int> combined() async* {
yield* countTo(3);
yield 99;
}Preguiçoso até ser escutado
Uma função async* não começa a ser executada até que alguém a escute. O corpo só é executado à medida que o ouvinte solicita cada valor. ⏸️
As pausas respeitam o ouvinte
Se um ouvinte for pausado, o gerador também será pausado no próximo yield. Essa contrapressão impede que os produtores sobrecarreguem os consumidores.
Erros de async*
Um throw dentro de uma função async* se transforma em um evento de erro no fluxo. Os ouvintes podem capturá-lo como qualquer outro erro de fluxo.
Stream<int> risky() async* {
yield 1;
throw 'boom';
}Consumindo seu gerador
Leia o fluxo gerado da maneira usual com await for. Cada valor produzido por yield chega ao laço na ordem.
await for (final n in countTo(3)) {
print(n);
}async* vs. StreamController
Para uma saída sequencial baseada em solicitação, async* é mais simples do que um StreamController. Use um controlador apenas quando os eventos vierem de retornos de chamada externos.
Verificação rápida
Como você emite um valor a partir de uma função async*?
Recapitulação
Você criou fluxos com async*, enviou valores por meio de yield, encaminhou valores com yield* e usou await entre os eventos. Agora, você pode consumir e produzir fluxos. 🎉
Perguntas Frequentes
A aula “Criar streams com async*” é grátis?
Sim — o texto completo de “Criar streams com async*” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Dart Academy, atualize para CoddyKit PRO. O curso de Dart Academy inclui 4 aulas no total.
O que vou aprender em “Criar streams com async*”?
Produza eventos a partir de um gerador. Você pratica Dart Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Dart Academy?
Nenhuma experiência prévia é necessária. Dart Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Criar streams com async*”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Dart Academy?
Sim. Cada aula de Dart Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Escutar com await for
- Streams individuais versus de transmissão
- Transformar streams: map, where e take
- Criar streams com async*