WEBVTT

1
00:01.120 --> 00:02.160
Bentornati.

2
00:02.200 --> 00:09.720
Abbiamo terminato lo stato
dell'interfaccia utente meteo, che è la
classe sigillata utilizzata per definire
un insieme fisso di sottoclassi.

3
00:09.760 --> 00:18.200
Facciamo in modo che sia un oggetto dati e
ora, all'interno

4
00:18.200 --> 00:21.160
del ViewModel, creiamo una nuova classe
Kotlin chiamata Weather ViewModel.

5
00:21.200 --> 00:28.160
Voglio che vi concentriate su di me perché
questa è

6
00:28.200 --> 00:29.000
una parte molto importante, ovvero la
sezione MVVM ViewModel.

7
00:29.000 --> 00:35.480
E contrassegniamo questa classe con
l'annotazione hilt view model.

8
00:35.520 --> 00:42.720
Alt più enter per importarlo e qui usare
l'annotazione inject con un costruttore.

9
00:42.720 --> 00:49.320
Lasciatemi passare il deposito privato val
weather alt più enter ed eccoci qui.

10
00:49.560 --> 00:52.280
Vi spiego cosa ho fatto qui.

11
00:52.400 --> 01:01.320
L'annotazione Hilt a ViewModel indica a
hilt di gestire il ciclo

12
01:01.320 --> 01:03.480
di vita di questo ViewModel e di
iniettarvi automaticamente le dipendenze.

13
01:03.480 --> 01:03.500
Simmetricamente.

14
01:03.500 --> 01:10.900
Quindi, utilizzando questa annotazione,
sto dicendo a Hilde che questo ViewModel
deve essere iniettabile.

15
01:11.100 --> 01:14.020
Poi ho usato il costruttore inject.

16
01:14.020 --> 01:23.340
Inject dice a hilt di fornire se il
repository, perché è

17
01:23.340 --> 01:27.380
già stato definito come fornire
l'implementazione del repository tramite
l'annotazione binds.

18
01:27.420 --> 01:32.500
Hilt può iniettarlo qui nel modulo del
repository.

19
01:32.620 --> 01:36.740
Si può notare che viene utilizzata
l'annotazione binds.

20
01:36.740 --> 01:44.220
Quindi, poiché si è già definito come
fornire un'implementazione

21
01:44.260 --> 01:46.780
del repository tramite l'annotazione
binds, si può iniettarla qui.

22
01:46.780 --> 01:54.220
Quindi hilt inietterà il repository
all'interno del costruttore del ViewModel.

23
01:54.260 --> 01:54.780
Ok.

24
01:54.940 --> 02:00.060
Quindi non preoccupatevi del meccanismo e
del funzionamento dell'elsa.

25
02:00.060 --> 02:01.220
È molto semplice.

26
02:01.380 --> 02:07.450
Bisogna solo prestare attenzione a cosa
definire e come definire i vincoli.

27
02:07.450 --> 02:09.450
Come utilizzare le forniture.

28
02:09.450 --> 02:17.650
Come utilizzare Hill per visualizzare
l'applicazione Android modale,
l'applicazione Android modale o il punto
di ingresso della classe.

29
02:17.690 --> 02:18.370
E questi.

30
02:18.410 --> 02:24.610
Queste annotazioni sono molto importanti
da capire e facilitano il lavoro.

31
02:24.650 --> 02:32.770
Ok, quindi hilt ViewModel è usato per dire
che questa classe agirà come ViewModel e
dovrà essere iniettabile.

32
02:32.770 --> 02:38.450
E qui il costruttore inject è usato per
fornire una dipendenza dal repository del
tempo.

33
02:38.450 --> 02:42.210
Quindi l'elsa sa automaticamente come
fornirlo.

34
02:42.530 --> 02:48.450
Questo dipende dal repository meteo,
perché lo definiamo nel nostro modulo.

35
02:48.450 --> 02:53.650
Si può notare che il modello di repository
è molto importante per fornire il
repository del tempo.

36
02:53.650 --> 03:01.490
E qui abbiamo bisogno che, quando abbiamo
bisogno di un'istanza di repository meteo,

37
03:01.490 --> 03:04.450
l'elsa la inietti perché la definiamo come
binds e all'interno del nostro modulo.

38
03:04.450 --> 03:10.680
Quindi, all'interno del modulo, fornire
tutte le dipendenze che devono essere
iniettate.

39
03:10.880 --> 03:14.360
Ora dobbiamo aggiornare lo stato
dell'interfaccia utente.

40
03:14.600 --> 03:19.040
Inizio con lo stato di val ui privato.

41
03:19.080 --> 03:20.080
È di tipo.

42
03:20.120 --> 03:25.600
Flusso di stato mutabile dello stato
dell'interfaccia utente meteo.

43
03:25.720 --> 03:30.920
E qui dobbiamo definire il caricamento del
punto di stato dell'interfaccia utente del
meteo.

44
03:31.400 --> 03:38.080
Quindi occorre creare uno stato
dell'interfaccia utente e impostare lo
stato su variabili di tipo state to flow.

45
03:38.200 --> 03:42.280
E qui dobbiamo usarlo come flusso di
stato.

46
03:42.400 --> 03:48.560
Lo stato dell'interfaccia utente è privato
e lo stato dell'interfaccia utente
mutabile è pubblico.

47
03:48.840 --> 03:56.640
Quindi lo stato dell'interfaccia utente,
privato e mutabile, è pubblico e di sola
lettura per l'interfaccia utente.

48
03:56.960 --> 04:00.280
Contiene lo stato attuale dell'interfaccia
utente.

49
04:00.280 --> 04:01.160
Caricamento.

50
04:01.320 --> 04:03.240
Successo o errore.

51
04:03.600 --> 04:10.000
Quindi stiamo realizzando la gestione
dello stato dell'interfaccia utente con il
flusso di stati.

52
04:10.320 --> 04:15.020
Anche in questo caso abbiamo creato questa
variabile come mutabile e privata.

53
04:15.020 --> 04:23.420
E questo è lo stato dell'interfaccia
utente, che è pubblico e di sola lettura,
perché stiamo leggendo solo dallo stato
dell'interfaccia utente.

54
04:23.420 --> 04:30.100
Quindi questo verrà mantenuto privato e
sarà visibile alle nostre classi di
applicazione.

55
04:30.140 --> 04:30.620
Ok.

56
04:30.780 --> 04:34.820
Questo è l'incapsulamento e la privacy del
nostro codice.

57
04:34.860 --> 04:42.220
Ora dobbiamo creare altre due variabili,
la posizione e la posizione selezionata.

58
04:42.220 --> 04:48.940
Quindi la posizione privata delle val
equivale al flusso di stato mutabile.

59
04:48.980 --> 04:57.700
È di tipo elenco di stringhe e lo
inizializziamo con l'elenco vuoto di
posizioni val.

60
04:57.700 --> 05:00.540
È uno stato di flusso.

61
05:01.020 --> 05:08.580
Elenco di stringhe che equivalgono a punti
di localizzazione come flusso di stato.

62
05:08.900 --> 05:20.640
Quindi la posizione privata val selected
equivale al flusso di

63
05:20.680 --> 05:21.200
stato mutabile di stringa e lo inizializza
come stringa vuota.

64
05:21.560 --> 05:24.480
Posizione selezionata da Val.

65
05:24.480 --> 05:26.560
È di tipo state.

66
05:26.600 --> 05:34.680
Il flusso di tipo stringa è uguale al
punto di posizione selezionato come flusso
di stato.

67
05:34.920 --> 05:40.640
Vi spiego alcuni concetti per cui
utilizziamo lo stato flow.

68
05:40.640 --> 05:48.360
Il flusso di stato è un flusso osservabile
con supporto di stato utilizzato per la
gestione dello stato dell'interfaccia
utente.

69
05:48.360 --> 05:49.440
Fa caldo.

70
05:49.480 --> 05:52.520
Si aggiorna sempre ai collezionisti.

71
05:52.720 --> 05:58.640
Consideratelo come un sostituto dei dati
in tempo reale per il codice moderno
basato sulle coroutine.

72
05:58.840 --> 06:06.920
Quindi preferisco usare il flusso di stati
e il flusso di

73
06:06.920 --> 06:07.720
stati mutabili con Jetpack Compose invece
dei dati live mutabili.

74
06:07.720 --> 06:13.920
Ecco come e perché utilizziamo il flusso
di stati in Jetpack Compose.


