O que é SharedFlow e como ele difere do StateFlow?
sobes.tech IA
Resposta da IA
SharedFlow e StateFlow são ambos tipos de flux da biblioteca kotlinx.coroutines, destinados à programação reativa e gestão de fluxos de dados assíncronos, mas têm objetivos e comportamentos diferentes.
StateFlow é um fluxo que sempre contém o estado atual (valor). Semelhante a um Observable com o último valor, que pode ser obtido a qualquer momento. O StateFlow mantém sempre um valor atual e ao subscrever-se emite imediatamente esse valor. É útil para representar o estado da interface de utilizador ou outros dados que devem ter um valor atual.
SharedFlow é um fluxo mais geral que pode ter múltiplos subscritores e não mantém estado por padrão. Pode ser configurado com um buffer e políticas de reenvio de eventos (replay). O SharedFlow é usado para transmissão de eventos de forma difusa, que não precisam necessariamente de um valor atual, como eventos de navegação, notificações ou sinais de uso único.
Diferenças principais:
- O StateFlow sempre contém o estado atual, o SharedFlow não (se replay=0).
- O StateFlow ao subscrever-se emite imediatamente o valor atual, o SharedFlow apenas se estiver configurado com replay.
- O SharedFlow é mais flexível e adequado para eventos, o StateFlow para estado.
Exemplo de uso do StateFlow:
val stateFlow = MutableStateFlow(0)
// Atualizar estado
stateFlow.value = 1
// Subscrever
stateFlow.collect { value ->
println("Valor atual: $value")
}
Exemplo de SharedFlow com replay:
val sharedFlow = MutableSharedFlow<Int>(replay = 1)
// Emitir evento
sharedFlow.emit(42)
// Novo subscritor receberá o último evento graças ao replay
sharedFlow.collect { evento ->
println("Evento recebido: $evento")
}