0Pricing
Android Academy · Aula

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.
  • stateIn converte 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

  1. Fundamentos e escopos de corrotinas
  2. viewModelScope e Dispatchers
  3. Fundamentos do Kotlin Flow
  4. StateFlow e SharedFlow
← Voltar para Android Academy