Esporre lo stato dal ViewModel
Alimenti l'interfaccia Compose da un ViewModel.
Esporre lo stato dal ViewModel è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.
Esporre lo stato all'interfaccia
Un ViewModel contiene lo stato, ma l'interfaccia deve poterlo osservare e ridisegnarsi quando cambia.
Nel moderno sviluppo Android, due strumenti comuni svolgono questo compito: StateFlow e State di Compose.
Il modello mutable e immutable
Una buona pratica consiste nel mantenere una proprietà di supporto mutable privata ed esporne una versione pubblica in sola lettura.
In questo modo si impedisce all'interfaccia di modificare accidentalmente lo stato direttamente.
Esporre lo stato con StateFlow
Utilizzi internamente un MutableStateFlow ed esponga un StateFlow in sola lettura.
class CounterViewModel : ViewModel() {
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()
fun increment() {
_count.value++
}
}Raccogliere StateFlow in Compose
Il Composable converte il flow in uno stato Compose con collectAsState() (o con la variante consapevole del ciclo di vita, trattata più avanti).
@Composable
fun CounterScreen(vm: CounterViewModel) {
val count by vm.count.collectAsState()
Text("Count: " + count)
}Perché StateFlow richiede un valore iniziale
Un StateFlow ha sempre un valore corrente. Per questo è necessario assegnargli un valore iniziale quando lo si crea.
Ogni nuovo collector riceve immediatamente il valore più recente, mai un flusso vuoto.
Alternativa: mutableStateOf di Compose
Per uno stato semplice e locale alla schermata all'interno del ViewModel, può usare anche mutableStateOf di Compose, che Compose osserva automaticamente.
class CounterViewModel : ViewModel() {
var count by mutableStateOf(0)
private set
fun increment() { count++ }
}StateFlow e State di Compose a confronto
- StateFlow fa parte delle coroutine Kotlin e funziona ovunque, non solo in Compose. È ideale per flussi condivisi e consapevoli del ciclo di vita.
- mutableStateOf è specifico di Compose ed è molto conciso.
In genere, nelle app di grandi dimensioni si preferisce StateFlow per i ViewModel.
Modellare lo stato della schermata come un unico oggetto
Anziché usare molti flow separati, raggruppi i campi correlati in un'unica data class dello stato UI. In questo modo gli aggiornamenti sono atomici e prevedibili.
data class ProfileUiState(
val name: String = "",
val isLoading: Boolean = false,
val error: String? = null
)Esporre l'oggetto dello stato UI
Esponga un unico StateFlow di quella classe di stato. L'interfaccia legge tutto da un'unica fonte di verità.
private val _uiState = MutableStateFlow(ProfileUiState())
val uiState: StateFlow<ProfileUiState> =
_uiState.asStateFlow()Aggiornamento dello stato immutabile
Aggiorni lo stato creando una copia con i campi modificati, senza mai mutare l'oggetto precedente.
fun load() {
_uiState.update { it.copy(isLoading = true) }
// ... fetch, then:
_uiState.update {
it.copy(isLoading = false, name = "Ada")
}
}Gli eventi risalgono, lo stato scende
Questo è il principio fondamentale del flusso unidirezionale dei dati:
- Lo stato scende verso il basso dal ViewModel all'interfaccia utente.
- Gli eventi risalgono verso l'alto dall'interfaccia utente al ViewModel tramite chiamate di funzione.
Verifica rapida
Verifichi la Sua comprensione dell'esposizione dello stato.
Riepilogo
Ha imparato a:
- Mantenere un
MutableStateFlowprivato ed esporre unStateFlowin sola lettura. - Raggruppare i campi correlati in una data class dello stato dell'interfaccia utente.
- Aggiornare lo stato con
copy()tramiteupdate {}. - Far scendere lo stato e risalire gli eventi.
Domande Frequenti
La lezione «Esporre lo stato dal ViewModel» è gratuita?
Sì — il testo completo di «Esporre lo stato dal ViewModel» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.
Cosa imparerò in «Esporre lo stato dal ViewModel»?
Alimenti l'interfaccia Compose da un ViewModel. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Android Academy?
Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Esporre lo stato dal ViewModel»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Android Academy?
Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Perché usare un ViewModel?
- Esporre lo stato dal ViewModel
- Il ciclo di vita di Android
- collectAsStateWithLifecycle