StateFlow e SharedFlow
Exponha o estado reativo do seu aplicativo.
StateFlow e SharedFlow é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.
Fluxos quentes
Diferentemente dos fluxos frios, StateFlow e SharedFlow são quentes: existem independentemente dos coletores e podem ser compartilhados por vários deles.
StateFlow é um contêiner de estado
Um StateFlow sempre mantém um valor atual. Novos coletores recebem imediatamente esse valor mais recente. Ele é perfeito para o estado da interface.
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()Atualizando StateFlow
Defina .value diretamente ou use update para uma leitura, modificação e escrita atômicas.
_count.value++
// or, atomically:
_count.update { it + 1 }StateFlow agrupa e elimina duplicatas
O StateFlow mantém apenas o valor mais recente (agrupamento) e não emite novamente se o novo valor for igual ao anterior. Isso evita atualizações redundantes da interface.
SharedFlow para eventos
Um SharedFlow não precisa ter um valor atual e pode repetir um número configurável de emissões anteriores. Ele é adequado para eventos pontuais, como navegação ou exibição de uma mensagem breve.
private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()Emitindo eventos
Emita valores em um SharedFlow a partir de uma corrotina.
fun onSave() {
viewModelScope.launch {
_events.emit("Saved!")
}
}Por que não usar StateFlow para eventos
O StateFlow mantém o último valor, portanto um coletor que se inscreva novamente (após uma rotação) receberia o evento antigo outra vez e, por exemplo, navegaria duas vezes. O SharedFlow evita repetir emissões por padrão.
Configurando SharedFlow
Ajuste replay e extraBufferCapacity para controlar o armazenamento em buffer e o comportamento de contrapressão.
MutableSharedFlow<String>(
replay = 0,
extraBufferCapacity = 1
)Convertendo um Fluxo frio em StateFlow
Use stateIn para transformar um fluxo upstream frio em um StateFlow compartilhado e limitado ao ViewModel.
val uiState = repo.stream()
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Escolhendo entre eles
- StateFlow → estado atual da tela (sempre tem um valor).
- SharedFlow → eventos temporários (executados uma vez).
Coletando ambos
Cole o StateFlow com collectAsStateWithLifecycle no Compose; colete os eventos do SharedFlow dentro de um LaunchedEffect para tratá-los uma única vez.
LaunchedEffect(Unit) {
vm.events.collect { msg -> showSnackbar(msg) }
}Verificação rápida
Teste sua compreensão de StateFlow e SharedFlow.
Recapitulação
Você aprendeu:
- StateFlow é um contêiner de estado quente, com valores combinados e um valor atual.
- SharedFlow é um fluxo de eventos quente com repetição configurável.
- Use StateFlow para estados e SharedFlow para eventos únicos.
stateInconverte fluxos frios em StateFlow.
Perguntas Frequentes
A aula “StateFlow e SharedFlow” é grátis?
Sim — o texto completo de “StateFlow e SharedFlow” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.
O que vou aprender em “StateFlow e SharedFlow”?
Exponha o estado reativo do seu aplicativo. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Android Academy?
Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “StateFlow e SharedFlow”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Android Academy?
Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos e escopos de corrotinas
- viewModelScope e Dispatchers
- Fundamentos do Kotlin Flow
- StateFlow e SharedFlow