Streams individuais versus de transmissão
Escolha a stream certa para vários ouvintes.
Streams individuais versus de transmissão é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 2 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.
Dois tipos de fluxos
Os fluxos do Dart têm dois tipos: assinatura única e broadcast. A escolha certa depende de quantos ouvintes você precisa.
Fluxos de assinatura única
Um fluxo de assinatura única permite exatamente um ouvinte durante todo o seu tempo de vida. Esse é o padrão e é ideal para uma sequência executada uma única vez, como a leitura de um arquivo. 📄
Escute apenas uma vez
Tente escutar duas vezes um fluxo de assinatura única e o Dart lançará um StateError. O fluxo se lembra de que já tem seu único ouvinte.
final s = Stream.fromIterable([1, 2]);
s.listen(print);
s.listen(print); // throws StateErrorArmazenado até você escutar
Um fluxo de assinatura única aguarda pacientemente. Ele não produz eventos até que algo comece a escutá-lo, portanto nenhum valor é perdido.
Fluxos broadcast
Um fluxo broadcast permite que muitos ouvintes se inscrevam ao mesmo tempo. Cada ouvinte ativo recebe os mesmos eventos à medida que são emitidos. 📡
Converter para broadcast
Transforme um fluxo de assinatura única em um fluxo compartilhado chamando asBroadcastStream. Agora, vários ouvintes podem se conectar a ele.
final shared = source.asBroadcastStream();
shared.listen(print);
shared.listen((v) => log(v));Ouvintes tardios perdem eventos
Os fluxos broadcast não armazenam eventos em buffer. Um ouvinte que se inscreve tarde vê apenas os eventos emitidos a partir daquele momento, nunca os anteriores.
Os controladores escolhem o tipo
Um StreamController cria, por padrão, um fluxo de assinatura única. Use o construtor broadcast quando quiser vários ouvintes.
final ctrl = StreamController<int>.broadcast();
ctrl.stream.listen(print);Quando usar assinatura única
Prefira um fluxo de assinatura única quando os dados fluírem uma vez para um consumidor, como os bytes de uma resposta de rede ou a leitura de um arquivo.
Quando usar broadcast
Escolha um fluxo broadcast para eventos contínuos importantes para várias partes do seu aplicativo, como toques em botões ou atualizações de sensores em tempo real.
Verifique antes de escutar
Não tem certeza de qual tipo você tem? A propriedade isBroadcast informa isso, para que você evite o StateError causado por uma segunda escuta em fluxos de assinatura única.
if (!stream.isBroadcast) {
// only one listener allowed
}Verificação rápida
Qual fluxo é adequado para muitos ouvintes?
Recapitulação
Os fluxos de assinatura única atendem a um ouvinte e armazenam os eventos até serem lidos; os fluxos broadcast atendem a vários, mas ignoram os eventos passados. Escolha de acordo com a quantidade de ouvintes. 🎉
Perguntas Frequentes
A aula “Streams individuais versus de transmissão” é grátis?
Sim — o texto completo de “Streams individuais versus de transmissão” é 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 “Streams individuais versus de transmissão”?
Escolha a stream certa para vários ouvintes. 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 2 de 4.
Quanto tempo leva a aula “Streams individuais versus de transmissão”?
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*