Bentornati.
Abbiamo terminato lo stato dell'interfaccia utente meteo, che è la classe sigillata utilizzata per definire un insieme fisso di sottoclassi.
Facciamo in modo che sia un oggetto dati e ora, all'interno
del ViewModel, creiamo una nuova classe Kotlin chiamata Weather ViewModel.
Voglio che vi concentriate su di me perché questa è
una parte molto importante, ovvero la sezione MVVM ViewModel.
E contrassegniamo questa classe con l'annotazione hilt view model.
Alt più enter per importarlo e qui usare l'annotazione inject con un costruttore.
Lasciatemi passare il deposito privato val weather alt più enter ed eccoci qui.
Vi spiego cosa ho fatto qui.
L'annotazione Hilt a ViewModel indica a hilt di gestire il ciclo
di vita di questo ViewModel e di iniettarvi automaticamente le dipendenze.
Simmetricamente.
Quindi, utilizzando questa annotazione, sto dicendo a Hilde che questo ViewModel deve essere iniettabile.
Poi ho usato il costruttore inject.
Inject dice a hilt di fornire se il repository, perché è
già stato definito come fornire l'implementazione del repository tramite l'annotazione binds.
Hilt può iniettarlo qui nel modulo del repository.
Si può notare che viene utilizzata l'annotazione binds.
Quindi, poiché si è già definito come fornire un'implementazione
del repository tramite l'annotazione binds, si può iniettarla qui.
Quindi hilt inietterà il repository all'interno del costruttore del ViewModel.
Ok.
Quindi non preoccupatevi del meccanismo e del funzionamento dell'elsa.
È molto semplice.
Bisogna solo prestare attenzione a cosa definire e come definire i vincoli.
Come utilizzare le forniture.
Come utilizzare Hill per visualizzare l'applicazione Android modale, l'applicazione Android modale o il punto di ingresso della classe.
E questi.
Queste annotazioni sono molto importanti da capire e facilitano il lavoro.
Ok, quindi hilt ViewModel è usato per dire che questa classe agirà come ViewModel e dovrà essere iniettabile.
E qui il costruttore inject è usato per fornire una dipendenza dal repository del tempo.
Quindi l'elsa sa automaticamente come fornirlo.
Questo dipende dal repository meteo, perché lo definiamo nel nostro modulo.
Si può notare che il modello di repository è molto importante per fornire il repository del tempo.
E qui abbiamo bisogno che, quando abbiamo bisogno di un'istanza di repository meteo,
l'elsa la inietti perché la definiamo come binds e all'interno del nostro modulo.
Quindi, all'interno del modulo, fornire tutte le dipendenze che devono essere iniettate.
Ora dobbiamo aggiornare lo stato dell'interfaccia utente.
Inizio con lo stato di val ui privato.
È di tipo.
Flusso di stato mutabile dello stato dell'interfaccia utente meteo.
E qui dobbiamo definire il caricamento del punto di stato dell'interfaccia utente del meteo.
Quindi occorre creare uno stato dell'interfaccia utente e impostare lo stato su variabili di tipo state to flow.
E qui dobbiamo usarlo come flusso di stato.
Lo stato dell'interfaccia utente è privato e lo stato dell'interfaccia utente mutabile è pubblico.
Quindi lo stato dell'interfaccia utente, privato e mutabile, è pubblico e di sola lettura per l'interfaccia utente.
Contiene lo stato attuale dell'interfaccia utente.
Caricamento.
Successo o errore.
Quindi stiamo realizzando la gestione dello stato dell'interfaccia utente con il flusso di stati.
Anche in questo caso abbiamo creato questa variabile come mutabile e privata.
E questo è lo stato dell'interfaccia utente, che è pubblico e di sola lettura, perché stiamo leggendo solo dallo stato dell'interfaccia utente.
Quindi questo verrà mantenuto privato e sarà visibile alle nostre classi di applicazione.
Ok.
Questo è l'incapsulamento e la privacy del nostro codice.
Ora dobbiamo creare altre due variabili, la posizione e la posizione selezionata.
Quindi la posizione privata delle val equivale al flusso di stato mutabile.
È di tipo elenco di stringhe e lo inizializziamo con l'elenco vuoto di posizioni val.
È uno stato di flusso.
Elenco di stringhe che equivalgono a punti di localizzazione come flusso di stato.
Quindi la posizione privata val selected equivale al flusso di
stato mutabile di stringa e lo inizializza come stringa vuota.
Posizione selezionata da Val.
È di tipo state.
Il flusso di tipo stringa è uguale al punto di posizione selezionato come flusso di stato.
Vi spiego alcuni concetti per cui utilizziamo lo stato flow.
Il flusso di stato è un flusso osservabile con supporto di stato utilizzato per la gestione dello stato dell'interfaccia utente.
Fa caldo.
Si aggiorna sempre ai collezionisti.
Consideratelo come un sostituto dei dati in tempo reale per il codice moderno basato sulle coroutine.
Quindi preferisco usare il flusso di stati e il flusso di
stati mutabili con Jetpack Compose invece dei dati live mutabili.
Ecco come e perché utilizziamo il flusso di stati in Jetpack Compose.