Sobes.tech
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 de StateStreamable) 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.