Exposer l'état depuis un ViewModel
Pilotez l'interface Compose depuis un ViewModel.
Exposer l'état depuis un ViewModel est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.
Exposer l’état à l’interface
Un ViewModel conserve l’état, mais l’interface a besoin d’un moyen d’observer cet état et de se réafficher lorsqu’il change.
Dans Android moderne, deux outils courants permettent cela : StateFlow et l’State de Compose.
Le modèle mutable et immuable
Une bonne pratique consiste à conserver une propriété de sauvegarde mutable privée et à exposer une version publique en lecture seule.
Cela empêche l’interface de modifier accidentellement l’état directement.
Exposer l’état avec StateFlow
Utilisez un MutableStateFlow en interne et exposez-le sous la forme d’un StateFlow en lecture seule.
class CounterViewModel : ViewModel() {
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()
fun increment() {
_count.value++
}
}Collecter un StateFlow dans Compose
Le composable convertit le flux en état Compose avec collectAsState() (ou avec la variante prenant en compte le cycle de vie, présentée plus loin).
@Composable
fun CounterScreen(vm: CounterViewModel) {
val count by vm.count.collectAsState()
Text("Count: " + count)
}Pourquoi StateFlow a besoin d’une valeur initiale
Un StateFlow possède toujours une valeur actuelle. C’est pourquoi vous devez lui fournir une valeur initiale lors de sa création.
Tout nouveau collecteur reçoit immédiatement la dernière valeur : le flux n’est jamais vide.
Alternative : mutableStateOf de Compose
Pour un état simple propre à l’écran dans le ViewModel, vous pouvez également utiliser mutableStateOf de Compose, que Compose observe automatiquement.
class CounterViewModel : ViewModel() {
var count by mutableStateOf(0)
private set
fun increment() { count++ }
}StateFlow ou état Compose
- StateFlow fait partie des coroutines Kotlin et fonctionne partout, pas uniquement avec Compose. Il convient parfaitement aux flux partagés qui tiennent compte du cycle de vie.
- mutableStateOf est spécifique à Compose et très concis.
Dans les applications volumineuses, StateFlow est généralement privilégié pour les ViewModels.
Modéliser l’état de l’écran comme un seul objet
Au lieu d’utiliser plusieurs flux distincts, regroupez les champs associés dans une seule classe de données d’état de l’interface. Les mises à jour restent ainsi atomiques et prévisibles.
data class ProfileUiState(
val name: String = "",
val isLoading: Boolean = false,
val error: String? = null
)Exposer l’objet d’état de l’interface
Exposez un seul StateFlow de cette classe d’état. L’interface lit toutes les données depuis une source de vérité unique.
private val _uiState = MutableStateFlow(ProfileUiState())
val uiState: StateFlow<ProfileUiState> =
_uiState.asStateFlow()Mettre à jour un état immuable
Mettez à jour l’état en produisant une copy avec les champs modifiés, jamais en modifiant l’ancien objet.
fun load() {
_uiState.update { it.copy(isLoading = true) }
// ... fetch, then:
_uiState.update {
it.copy(isLoading = false, name = "Ada")
}
}Les événements remontent, l’état descend
C’est le principe central du flux de données unidirectionnel :
- L’état descend du ViewModel vers l’interface utilisateur.
- Les événements remontent de l’interface utilisateur vers le ViewModel via des appels de fonction.
Vérification rapide
Vérifiez votre compréhension de l’exposition de l’état.
Récapitulatif
Vous avez appris à :
- Conserver un
MutableStateFlowprivé et exposer unStateFlowen lecture seule. - Regrouper les champs associés dans une classe de données d’état de l’interface utilisateur.
- Mettre à jour l’état avec
copy()viaupdate {}. - Faire descendre l’état et remonter les événements.
Questions Fréquemment Posées
La leçon « Exposer l'état depuis un ViewModel » est-elle gratuite ?
Oui — le texte complet de « Exposer l'état depuis un ViewModel » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Exposer l'état depuis un ViewModel » ?
Pilotez l'interface Compose depuis un ViewModel. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Android Academy ?
Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Exposer l'état depuis un ViewModel » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?
Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Pourquoi utiliser un ViewModel ?
- Exposer l'état depuis un ViewModel
- Le cycle de vie Android
- collectAsStateWithLifecycle