Jetpack Compose Academy · Lektion

hiltViewModel og @HiltViewModel

Inject ViewModels i Composables.

Lektion 3 af 413 trin

hiltViewModel og @HiltViewModel er en gratis Jetpack Compose Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Jetpack Compose Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.

ViewModels har også brug for afhængigheder

Din ViewModel afhænger typisk af et repository eller en use case. Hilt kan injicere dem for dig, så du aldrig behøver oprette dem manuelt igen.

Annotér ViewModel

Markér klassen med @HiltViewModel, og tilføj @Inject til dens konstruktør. Nu ved Hilt, hvordan den skal oprettes med alle dens afhængigheder.

@HiltViewModel
class FeedViewModel @Inject constructor(private val repo: Repo) : ViewModel()

Injicér alt, hvad den har brug for

Konstruktørparametre kan være enhver type, Hilt kender, f.eks. et repository, en use case eller en logger. Hilt løser hele kæden for dig.

@HiltViewModel
class FeedViewModel @Inject constructor(
    repo: Repo, logger: Logger
) : ViewModel()

Hent en i Compose

Inde i en Composable kalder du hiltViewModel() for at hente en Hilt-oprettet ViewModel. Ingen standardkode til en fabrik – kun ét rent kald.

@Composable
fun FeedScreen(vm: FeedViewModel = hiltViewModel()) { }

Tilføj Compose-afhængigheden

hiltViewModel() findes i artefakten hilt-navigation-compose. Tilføj den til din Gradle-fil, så funktionen er tilgængelig på dine skærme.

implementation("androidx.hilt:hilt-navigation-compose:1.2.0")

Mønster med standardparameter

Hvis du sætter hiltViewModel() som standardparameter, forbliver Composable-testenbar. En test kan stadig sende en falsk ViewModel direkte.

@Composable
fun FeedScreen(vm: FeedViewModel = hiltViewModel())

Afgrænset til ejeren

hiltViewModel() afgrænser instansen til den nærmeste ViewModelStoreOwner, normalt aktiviteten eller navigationsdestinationen, så den overlever recomposition.

Én ViewModel pr. destination

Inde i en NavHost får hver destination sin egen ViewModel-instans. Navigér væk og tilbage, så modtager skærmen en ny instans.

Markér også aktiviteten

Værtsaktiviteten skal have @AndroidEntryPoint, så Hilt kan levere ViewModels til dens Composables. Uden den mislykkes injektionen.

@AndroidEntryPoint
class MainActivity : ComponentActivity()

Eksponér tilstand, skjul logik

Den injicerede ViewModel eksponerer brugergrænsefladens tilstand, og skærmen læser den blot. Din Composable forbliver enkel, mens logikken bor ét testet sted.

val state by vm.uiState.collectAsStateWithLifecycle()

Ingen manuelle fabrikker

Før Hilt skrev du en ViewModelProvider.Factory for hver ViewModel med argumenter. Hilt fjerner al denne standardkode. 🎁

Hurtigt tjek

Hvilket par opsætter korrekt en Hilt-injiceret ViewModel til en Composable?

Opsummering: Injicerede ViewModels

Du har lært at markere en ViewModel med @HiltViewModel og hente den via hiltViewModel(), afgrænset til sin ejer uden fabrikskode. ✨

Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “hiltViewModel og @HiltViewModel” gratis?

Ja — hele teksten til “hiltViewModel og @HiltViewModel” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Jetpack Compose Academy-kurset, skal du opgradere til CoddyKit PRO. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “hiltViewModel og @HiltViewModel”?

Inject ViewModels i Composables. Du øver dig i Jetpack Compose Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Jetpack Compose Academy?

Der kræves ingen tidligere erfaring. Jetpack Compose Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “hiltViewModel og @HiltViewModel”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Jetpack Compose Academy-lektion?

Ja. Alle Jetpack Compose Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvorfor DI: Testbar, afkoblet kode
  2. Moduler, @Provides og @Binds
  3. hiltViewModel og @HiltViewModel
  4. Scopes og komponenters levetid
← Tilbage til Jetpack Compose Academy