Jetpack Compose Academy · Oppitunti

hiltViewModel ja @HiltViewModel

Injektoikaa ViewModelit Composable-funktioihin.

Oppitunti 3/413 vaihetta

hiltViewModel ja @HiltViewModel on ilmainen Jetpack Compose Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Jetpack Compose Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Jetpack Compose Academy-kurssilla on yhteensä 4 oppituntia.

ViewModel tarvitsee myös riippuvuuksia

ViewModel riippuu yleensä repositoriosta tai käyttötapauksesta. Hilt voi injektoida ne puolestasi, joten sinun ei tarvitse enää koskaan rakentaa niitä käsin.

Merkitse ViewModel

Merkitse luokka annotaatiolla @HiltViewModel ja lisää sen konstruktorille @Inject. Nyt Hilt tietää, miten se luodaan kaikkine riippuvuuksineen.

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

Injektoi kaikki tarvittava

Konstruktorin parametrit voivat olla mitä tahansa Hiltin tuntemia tyyppejä, kuten repository, käyttötapaus tai lokikirjoittaja. Hilt ratkaisee koko ketjun puolestasi.

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

Hae ViewModel Composessa

Kutsu Composablen sisällä funktiota hiltViewModel() saadaksesi Hiltin rakentaman ViewModelin. Ei tehdaskoodia, vain yksi selkeä kutsu.

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

Lisää Compose-riippuvuus

hiltViewModel() sijaitsee hilt-navigation-compose-artefaktissa. Lisää se Gradle-tiedostoosi, jotta funktio on käytettävissä näytöissäsi.

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

Oletusparametrimalli

Kun asetat hiltViewModel()-funktion oletusparametriksi, Composable pysyy testattavana. Testi voi edelleen välittää feikki-ViewModelin suoraan.

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

Omistajan elinkaaren mukaan

hiltViewModel() rajaa instanssin lähimpään ViewModelStoreOwner-omistajaan, yleensä Activityyn tai navigointikohteeseen, joten instanssi säilyy uudelleenkokoonpanon aikana.

Yksi ViewModel kohdetta kohti

NavHostin sisällä jokainen kohde saa oman ViewModel-instanssinsa. Kun siirryt pois näkymästä ja palaat takaisin, näkymä saa uuden instanssin.

Merkitse myös Activity

Isäntä-Activitylla on oltava @AndroidEntryPoint, jotta Hilt voi toimittaa ViewModelit sen Composableille. Ilman sitä injektointi epäonnistuu.

@AndroidEntryPoint
class MainActivity : ComponentActivity()

Paljasta tila, piilota logiikka

Injektoitu ViewModel paljastaa käyttöliittymän tilan, ja näyttö vain lukee sitä. Composable pysyy kevyenä, kun logiikka sijaitsee yhdessä testatussa paikassa.

val state by vm.uiState.collectAsStateWithLifecycle()

Ei manuaalisia tehtaita

Ennen Hiltia kirjoitit jokaiselle argumentteja käyttävälle ViewModelille ViewModelProvider.Factory-tehtaan. Hilt poistaa tämän mallikoodin kokonaan. 🎁

Pikatarkistus

Mitkä kaksi asiaa määrittävät Composablelle oikein Hiltillä injektoidun ViewModelin?

Kertaus: Injektoidut ViewModelit

Opit merkitsemään ViewModelin annotaatiolla @HiltViewModel ja hakemaan sen hiltViewModel()-funktiolla omistajansa mukaan rajattuna ilman tehdaskoodia. ✨

Aloita maksutta

Opi Kotlin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”hiltViewModel ja @HiltViewModel” ilmainen?

Kyllä – oppitunnin ”hiltViewModel ja @HiltViewModel” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Jetpack Compose Academy-kurssin, päivitä CoddyKit PROhon. Jetpack Compose Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”hiltViewModel ja @HiltViewModel”?

Injektoikaa ViewModelit Composable-funktioihin. Harjoittelet Jetpack Compose Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Jetpack Compose Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Jetpack Compose Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”hiltViewModel ja @HiltViewModel”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Jetpack Compose Academy-oppitunnilla?

Kyllä. Jokainen Jetpack Compose Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Miksi DI: testattava ja irtikytketty koodi
  2. Moduulit, @Provides ja @Binds
  3. hiltViewModel ja @HiltViewModel
  4. Rajaukset ja komponenttien elinkaaret
← Takaisin: Jetpack Compose Academy