0Pricing
Dart Academy · Aula

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

  1. Escutar com await for
  2. Streams individuais versus de transmissão
  3. Transformar streams: map, where e take
  4. Criar streams com async*
← Voltar para Dart Academy