hiltViewModel et @HiltViewModel
Injectez des ViewModels dans les Composables.
hiltViewModel et @HiltViewModel est une leçon Jetpack Compose Academy gratuite sur CoddyKit. Ceci est la leçon 3 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 Jetpack Compose Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Jetpack Compose Academy comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
ViewModels Need Dependencies Too
Your ViewModel usually depends on a repository or use case. Hilt can inject those for you, so you never build them by hand again.
Annotate the ViewModel
Mark the class with @HiltViewModel and add @Inject to its constructor. Hilt now knows how to create it with all its dependencies.
@HiltViewModel
class FeedViewModel @Inject constructor(private val repo: Repo) : ViewModel()Inject Anything It Needs
Constructor parameters can be any type Hilt knows, like a repository, a use case, or a logger. Hilt resolves the whole chain for you.
@HiltViewModel
class FeedViewModel @Inject constructor(
repo: Repo, logger: Logger
) : ViewModel()Get One in Compose
Inside a Composable, call hiltViewModel() to obtain a Hilt-built ViewModel. No factory boilerplate, just one clean call.
@Composable
fun FeedScreen(vm: FeedViewModel = hiltViewModel()) { }Add the Compose Dependency
hiltViewModel() lives in the hilt-navigation-compose artifact. Add it to your Gradle file so the function is available in your screens.
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")Default Parameter Pattern
Putting hiltViewModel() as a default parameter keeps the Composable testable. A test can still pass a fake ViewModel directly.
@Composable
fun FeedScreen(vm: FeedViewModel = hiltViewModel())Scoped to the Owner
hiltViewModel() scopes the instance to the nearest ViewModelStoreOwner, usually the Activity or nav destination, so it survives recomposition.
One ViewModel Per Destination
Inside a NavHost, each destination gets its own ViewModel instance. Navigate away and back, and that screen receives a fresh one.
Mark the Activity Too
The host Activity must carry @AndroidEntryPoint so Hilt can deliver ViewModels into its Composables. Without it, injection fails.
@AndroidEntryPoint
class MainActivity : ComponentActivity()Expose State, Hide Logic
The injected ViewModel exposes UI state and the screen just reads it. Your Composable stays thin while logic lives in one tested place.
val state by vm.uiState.collectAsStateWithLifecycle()No Manual Factories
Before Hilt you wrote a ViewModelProvider.Factory for each ViewModel with arguments. Hilt removes that boilerplate completely. 🎁
Quick Check
Which pair correctly sets up a Hilt-injected ViewModel for a Composable?
Recap: Injected ViewModels
You learned to tag a ViewModel with @HiltViewModel and fetch it via hiltViewModel(), scoped to its owner with zero factory code. ✨
Apprends Kotlin avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « hiltViewModel et @HiltViewModel » est-elle gratuite ?
Oui — le texte complet de « hiltViewModel et @HiltViewModel » 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 Jetpack Compose Academy, passe à CoddyKit PRO. Le cours Jetpack Compose Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « hiltViewModel et @HiltViewModel » ?
Injectez des ViewModels dans les Composables. Tu pratiques Jetpack Compose 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 Jetpack Compose Academy ?
Aucune expérience préalable n'est requise. Jetpack Compose 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 3 sur 4.
Combien de temps prend la leçon « hiltViewModel et @HiltViewModel » ?
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 Jetpack Compose Academy ?
Oui. Chaque leçon Jetpack Compose 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 la DI : du code testable et découplé
- Modules, @Provides et @Binds
- hiltViewModel et @HiltViewModel
- Portées et durées de vie des composants