0Pricing
Android Academy · Aula

Expondo estado a partir do ViewModel

Controle a interface do Compose a partir de um ViewModel.

Expondo estado a partir do ViewModel é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 2 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.

Expondo o estado para a interface

Um ViewModel mantém o estado, mas a interface precisa de uma maneira de observar esse estado e ser renderizada novamente quando ele mudar.

No Android moderno, duas ferramentas comuns fazem isso: StateFlow e o State do Compose.

O padrão mutável versus imutável

Uma boa prática é manter uma propriedade de apoio mutável privada e expor uma versão pública somente para leitura.

Isso impede que a interface altere o estado diretamente por acidente.

Expondo com StateFlow

Use um MutableStateFlow internamente e exponha-o como um StateFlow somente para leitura.

class CounterViewModel : ViewModel() {
    private val _count = MutableStateFlow(0)
    val count: StateFlow<Int> = _count.asStateFlow()

    fun increment() {
        _count.value++
    }
}

Coletando StateFlow no Compose

O Composable converte o fluxo em estado do Compose com collectAsState() (ou com a variante consciente do ciclo de vida, abordada mais adiante).

@Composable
fun CounterScreen(vm: CounterViewModel) {
    val count by vm.count.collectAsState()
    Text("Count: " + count)
}

Por que StateFlow precisa de um valor inicial

Um StateFlow sempre tem um valor atual. Por isso, você precisa fornecer um valor inicial ao criá-lo.

Qualquer novo coletor recebe imediatamente o valor mais recente, nunca um fluxo vazio.

Alternativa: Compose mutableStateOf

Para estados simples e locais da tela dentro do ViewModel, você também pode usar o mutableStateOf do Compose, que é observado automaticamente pelo Compose.

class CounterViewModel : ViewModel() {
    var count by mutableStateOf(0)
        private set

    fun increment() { count++ }
}

StateFlow versus estado do Compose

  • StateFlow faz parte das corrotinas do Kotlin e funciona em qualquer lugar, não apenas no Compose. Ele é excelente para fluxos compartilhados e conscientes do ciclo de vida.
  • mutableStateOf é específico do Compose e muito conciso.

Em geral, StateFlow é a opção preferida para ViewModels em aplicativos maiores.

Modelando o estado da tela como um único objeto

Em vez de vários fluxos separados, agrupe os campos relacionados em uma única classe de dados de estado da interface. Isso mantém as atualizações atômicas e previsíveis.

data class ProfileUiState(
    val name: String = "",
    val isLoading: Boolean = false,
    val error: String? = null
)

Expondo o objeto de estado da interface

Exponha um único StateFlow dessa classe de estado. A interface lê tudo de uma única fonte de verdade.

private val _uiState = MutableStateFlow(ProfileUiState())
val uiState: StateFlow<ProfileUiState> =
    _uiState.asStateFlow()

Atualizando estado imutável

Atualize o estado produzindo uma copy com os campos alterados, nunca modificando o objeto antigo.

fun load() {
    _uiState.update { it.copy(isLoading = true) }
    // ... fetch, then:
    _uiState.update {
        it.copy(isLoading = false, name = "Ada")
    }
}

Os eventos sobem, o estado desce

Este é o núcleo do fluxo de dados unidirecional:

  • O estado flui para baixo, do ViewModel para a interface.
  • Os eventos fluem para cima, da interface para o ViewModel por meio de chamadas de função.

Verificação rápida

Teste sua compreensão sobre como expor o estado.

Recapitulação

Você aprendeu:

  • Manter um MutableStateFlow privado e expor um StateFlow somente para leitura.
  • Agrupar campos relacionados em uma classe de dados de estado da interface.
  • Atualizar com copy() por meio de update {}.
  • O estado flui para baixo e os eventos fluem para cima.

Perguntas Frequentes

A aula “Expondo estado a partir do ViewModel” é grátis?

Sim — o texto completo de “Expondo estado a partir do ViewModel” é 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 “Expondo estado a partir do ViewModel”?

Controle a interface do Compose a partir de um ViewModel. 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 2 de 4.

Quanto tempo leva a aula “Expondo estado a partir do ViewModel”?

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. Por que usar um ViewModel?
  2. Expondo estado a partir do ViewModel
  3. O ciclo de vida do Android
  4. collectAsStateWithLifecycle
← Voltar para Android Academy