Jetpack Compose Academy · Lekcja

hiltViewModel i @HiltViewModel

Wstrzykuj ViewModele do funkcji Composable

Lekcja 3 z 413 kroki

hiltViewModel i @HiltViewModel to bezpłatna lekcja Jetpack Compose Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Jetpack Compose Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Jetpack Compose Academy zawiera 4 lekcji w sumie.

ViewModel również potrzebuje zależności

Twój ViewModel zwykle zależy od repozytorium lub przypadku użycia. Hilt może wstrzyknąć je za Ciebie, więc nie musisz już nigdy tworzyć ich ręcznie.

Oznacz ViewModel

Oznacz klasę za pomocą @HiltViewModel i dodaj @Inject do jej konstruktora. Hilt wie teraz, jak utworzyć ją wraz ze wszystkimi zależnościami.

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

Wstrzyknij wszystko, czego potrzebuje

Parametry konstruktora mogą mieć dowolny typ znany Hilt, na przykład repozytorium, przypadek użycia lub rejestrator. Hilt rozwiąże za Ciebie cały łańcuch zależności.

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

Pobieranie ViewModel w Compose

Wewnątrz funkcji Composable wywołaj hiltViewModel(), aby uzyskać ViewModel utworzony przez Hilt. Bez kodu fabryki — tylko jedno przejrzyste wywołanie.

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

Dodaj zależność Compose

hiltViewModel() znajduje się w artefakcie hilt-navigation-compose. Dodaj go do pliku Gradle, aby funkcja była dostępna na ekranach.

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

Wzorzec parametru domyślnego

Umieszczenie hiltViewModel() jako parametru domyślnego zachowuje możliwość testowania funkcji Composable. Test nadal może bezpośrednio przekazać fałszywy ViewModel.

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

Zakres właściciela

hiltViewModel() przypisuje instancję do najbliższego ViewModelStoreOwner, zwykle Activity lub miejsca docelowego nawigacji, dzięki czemu instancja przetrwa rekompozycję.

Jeden ViewModel na miejsce docelowe

Wewnątrz NavHost każde miejsce docelowe otrzymuje własną instancję ViewModel. Po przejściu do innego miejsca i powrocie ten ekran otrzyma nową instancję.

Oznacz także Activity

Activity pełniąca rolę hosta musi mieć adnotację @AndroidEntryPoint, aby Hilt mógł dostarczać ViewModel do funkcji Composable. Bez niej wstrzykiwanie się nie powiedzie.

@AndroidEntryPoint
class MainActivity : ComponentActivity()

Udostępniaj stan, ukrywaj logikę

Wstrzyknięty ViewModel udostępnia stan interfejsu, a ekran tylko go odczytuje. Funkcja Composable pozostaje prosta, a logika znajduje się w jednym przetestowanym miejscu.

val state by vm.uiState.collectAsStateWithLifecycle()

Bez ręcznych fabryk

Przed użyciem Hilt trzeba było pisać ViewModelProvider.Factory dla każdego ViewModel z argumentami. Hilt całkowicie usuwa ten kod powtarzalny. 🎁

Szybkie sprawdzenie

Która para poprawnie konfiguruje ViewModel wstrzykiwany przez Hilt do funkcji Composable?

Podsumowanie: wstrzykiwane ViewModel

Dowiedziałeś się, jak oznaczyć ViewModel adnotacją @HiltViewModel i pobrać go za pomocą hiltViewModel(), z zakresem właściciela i bez kodu fabryki. ✨

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „hiltViewModel i @HiltViewModel” jest bezpłatna?

Tak — pełny tekst „hiltViewModel i @HiltViewModel” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Jetpack Compose Academy, przejdź na CoddyKit PRO. Kurs Jetpack Compose Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „hiltViewModel i @HiltViewModel”?

Wstrzykuj ViewModele do funkcji Composable Ćwiczysz Jetpack Compose Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Jetpack Compose Academy?

Nie wymagamy żadnego doświadczenia. Jetpack Compose Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „hiltViewModel i @HiltViewModel”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Jetpack Compose Academy?

Tak. Każda lekcja Jetpack Compose Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego DI: testowalny, luźno powiązany kod
  2. Moduły, @Provides i @Binds
  3. hiltViewModel i @HiltViewModel
  4. Zakresy i cykle życia komponentów
← Powrót do Jetpack Compose Academy