Sobes.tech
Junior — Middle

Como diferem o Flow, o StateFlow e o SharedFlow no contexto da programação reativa?

sobes.tech IA

Resposta da IA

No contexto da programação reativa em Kotlin (especialmente no Android), Flow, StateFlow e SharedFlow são diferentes tipos de flux de dados com propriedades distintas:

  • Flow: é um fluxo frio que começa a emitir dados apenas quando há uma subscrição. Cada subscritor recebe os dados desde o início, e os dados não são armazenados entre subscrições.

  • StateFlow: é um fluxo quente que sempre mantém o estado atual (valor). Ao subscrever, o subscritor recebe imediatamente o último valor, e depois todas as atualizações seguintes. Usado para representar um estado que pode mudar ao longo do tempo.

  • SharedFlow: é um fluxo quente que pode ter vários subscritores e não mantém o estado por padrão (mas pode ser configurado com um buffer e retransmissão). Permite transmitir eventos a vários subscritores sem guardar o último valor.

Exemplo:

val flow = flow {
    emit(1)
    delay(1000)
    emit(2)
}

val stateFlow = MutableStateFlow(0)
stateFlow.value = 1

val sharedFlow = MutableSharedFlow<Int>()
sharedFlow.emit(1)
  • Flow é adequado para cálculos sequenciais e fluxos de dados de uso único.
  • StateFlow para armazenar e observar o estado.
  • SharedFlow para eventos que se pretendem transmitir a vários ouvintes, como navegação ou mensagens.