Middle
Como são usados os streams no Flutter?
sobes.tech IA
Resposta da IA
As correntes no Flutter são usadas para trabalhar com sequências de eventos assíncronos. Baseiam-se na paradigma de programação reativa e oferecem uma forma de processar dados à medida que chegam.
Principais aplicações das correntes:
- Atualizações de UI: Ouvir alterações nos dados (por exemplo, de requisições de rede ou bases de dados) e atualizar automaticamente os widgets.
- Comunicação entre BLoC/Cubit e UI: BLoC/Cubit usam
Stream(através deStateStreamable) para emitir estados, aos quais a UI se inscreve. - Processamento de entrada do utilizador: Acompanhamento de eventos de entrada (por exemplo, de campos de texto).
- Trabalho com WebSocket e outras operações assíncronas: Obtenção de dados em tempo real.
Conceitos principais:
- Stream: Sequência de eventos assíncronos.
- StreamController: Gerencia o stream, permite adicionar dados (
add), erros (addError) e fechar o stream (close). - StreamSubscription: Objeto que representa uma subscrição ativa ao stream. Permite receber dados (
onData), tratar erros (onError) e terminar o stream (onDone).
Exemplo de uso com StreamBuilder:
// Suponhamos que temos um stream que emite números inteiros
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<int>(
stream: countStream, // Subscrevemo-nos ao stream
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // Enquanto o stream espera por dados
} else if (snapshot.hasError) {
return Text('Erro: ${snapshot.error}'); // Se ocorrer um erro
} else {
return Text('Count: ${snapshot.data}'); // Mostramos os últimos dados do stream
}
},
);
}
}
As correntes podem ser:
- Single-subscription: Apenas um ouvinte pode estar subscrito em qualquer momento. Tentar subscrever uma segunda vez causará um erro.
- Broadcast: Múltiplos ouvintes podem subscrever ao mesmo stream. Os dados são enviados a todos os ouvintes ativos.
Para processar correntes, muitas vezes usam-se operadores do pacote rxdart, que fornecem um conjunto rico de utilitários para transformar, filtrar e combinar correntes.