Sobes.tech
Junior — Middle

Qual é a diferença entre o uso de SharedFlow e StateFlow em fluxos de dados reativos?

sobes.tech IA

Resposta da IA

SharedFlow e StateFlow são tipos de flux da biblioteca Kotlin Coroutines para programação reativa, mas têm objetivos e comportamentos diferentes.

StateFlow:

  • Armazena o estado atual (valor), sempre tem o último valor.
  • Os assinantes recebem imediatamente o valor atual ao se inscreverem.
  • Usado para representar um estado que muda ao longo do tempo.
  • Suporta apenas um elemento final.

SharedFlow:

  • Por padrão, não armazena estado (embora possa configurar replay).
  • Pode transmitir eventos a vários assinantes.
  • Usado para eventos ou fluxos de dados onde a entrega a todos os assinantes é importante.
  • Permite configurar o buffer e o número de elementos repetidos.

Exemplo:

val stateFlow = MutableStateFlow(0) // sempre armazena o valor atual
val sharedFlow = MutableSharedFlow<Int>() // fluxo de eventos

// StateFlow: o assinante receberá imediatamente o valor atual
stateFlow.value = 1
stateFlow.collect { println(it) } // exibirá 1

// SharedFlow: o assinante receberá apenas novos eventos após a inscrição
sharedFlow.emit(1)
sharedFlow.collect { println(it) } // não exibirá 1, apenas os novos

Resumindo, StateFlow é para estado com o último valor, SharedFlow para eventos e múltiplas inscrições.