0Pricing
Android Academy · Leçon

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&nbsp;: 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 MutableStateFlow privé et exposer un StateFlow en 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() via update {}.
  • 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

  1. Pourquoi utiliser un ViewModel ?
  2. Exposer l'état depuis un ViewModel
  3. Le cycle de vie Android
  4. collectAsStateWithLifecycle
← Retour à Android Academy