WEBVTT

1
00:00.710 --> 00:05.030
Abbiamo terminato il database delle stanze
e il repository.

2
00:05.060 --> 00:06.620
Abbiamo terminato il livello del modello.

3
00:06.650 --> 00:09.050
Passiamo ora al livello del modello di
vista.

4
00:09.080 --> 00:15.110
Il livello del modello di vista espone i
flussi di dati rilevanti per la vista.

5
00:15.140 --> 00:19.520
Inoltre, funge da collegamento tra il
modello e la vista.

6
00:19.550 --> 00:24.110
Passiamo ad Android Studio e impariamo di
più sui modelli di vista.

7
00:24.110 --> 00:31.760
All'interno di questo pacchetto, creeremo
un altro pacchetto chiamato View Model e
all'interno

8
00:31.790 --> 00:38.990
del pacchetto View model creeremo una
nuova classe Kotlin chiamata Note View
model.

9
00:38.990 --> 00:46.460
Il modello di vista separa i dati relativi
all'interfaccia utente e la logica di
business dal frammento di attività della
vista.

10
00:46.460 --> 00:49.370
Composable promuove un'architettura
pulita.

11
00:49.370 --> 00:57.740
Questa separazione rende il modello di
vista indipendente dalla vista,
facilitando i test e la manutenzione.

12
00:57.770 --> 01:05.480
I modelli di vista sono consapevoli del
ciclo di vita, cioè sono

13
01:05.480 --> 01:06.860
progettati per sopravvivere alle modifiche
della configurazione, come la rotazione
dello schermo.

14
01:06.860 --> 01:11.900
In questo modo si evita la perdita di dati
e l'inutile prefetching dei dati.

15
01:11.930 --> 01:19.970
Vengono eseguiti durante il ciclo di vita
di un'attività o di un frammento,

16
01:19.970 --> 01:23.030
assicurando che i dati vengano conservati
finché il componente dell'interfaccia
utente è attivo.

17
01:23.060 --> 01:30.650
Per dire ad Android Studio che questa
classe agirà come ViewModel, dobbiamo
ereditare ViewModel.

18
01:30.680 --> 01:31.370
Alt+.

19
01:31.370 --> 01:35.180
Inserire per importare il pacchetto dal
ciclo di vita di Android X.

20
01:35.180 --> 01:39.320
Quindi la nostra classe agirà come
ViewModel.

21
01:39.320 --> 01:45.890
Nel costruttore del ViewModel, dobbiamo
passare una variabile di tipo repository.

22
01:45.890 --> 01:51.800
Quindi qui repository privato val note
repository ok.

23
01:51.800 --> 01:58.280
Perché useremo questo repository
all'interno del ViewModel per eseguire le
funzioni, l'inserimento

24
01:58.310 --> 02:03.170
e tutte le note simili a quelle che
abbiamo fatto nel repository.

25
02:03.200 --> 02:07.150
Dobbiamo chiamare le funzioni all'interno
del ViewModel.

26
02:07.180 --> 02:11.350
Inizieremo con Val tutti i nodi.

27
02:11.380 --> 02:17.620
È di tipo LiveData di tipo elenco di nodi
uguali.

28
02:17.620 --> 02:25.780
Per importare il nodo equivale alla
variabile del repository che abbiamo
creato per tutti i nodi.

29
02:25.810 --> 02:26.200
Ok.

30
02:26.230 --> 02:31.840
Quindi chiamiamo questo e il tipo
restituito è LiveData di tipo.

31
02:31.840 --> 02:33.550
Elenco dei nodi.

32
02:33.580 --> 02:39.040
Analogamente a quanto fatto nel
repository, creeremo il ViewModel.

33
02:39.070 --> 02:48.220
La seconda cosa da creare è la funzione
insert node equals to ViewModel.

34
02:48.220 --> 02:54.610
Scoop dot launch repository dot insert
node.

35
02:54.640 --> 02:59.170
Il ViewModel prepara e gestisce i dati per
l'interfaccia utente.

36
02:59.200 --> 03:06.700
Può interagire con il repository per
recuperare i dati e trasformarli come
necessario, prima di esporli alla

37
03:06.700 --> 03:14.350
vista, e usa Is LiveData o altri tipi
osservabili per fornire gli aggiornamenti
dei dati alla vista.

38
03:14.380 --> 03:18.040
Consentire alla vista di reagire alle
modifiche.

39
03:18.070 --> 03:25.810
I modelli di visualizzazione automatica
mantengono i dati durante le modifiche di
configurazione,

40
03:25.840 --> 03:29.140
evitando di ricaricare i dati dopo ogni
rotazione o modifica della configurazione.

41
03:29.140 --> 03:37.180
L'ambito del modello di vista è un ambito
coroutine legato al ciclo di vita del
modello di vista.

42
03:37.180 --> 03:46.090
Questo ambito è fornito dalla classe
ViewModel e garantisce che qualsiasi
coroutine

43
03:46.120 --> 03:50.890
lanciata al suo interno venga
automaticamente annullata se il ViewModel
viene cancellato.

44
03:50.890 --> 03:59.020
Ad esempio, quando l'interfaccia utente
associata non è più in uso e il lancio è

45
03:59.020 --> 04:06.580
un costruttore di coroutine che lancia una
nuova coroutine senza bloccare il thread
corrente, questa

46
04:06.580 --> 04:15.060
coroutine viene eseguita in background,
consentendo di eseguire operazioni di
lunga durata, come le operazioni

47
04:15.060 --> 04:18.510
di database, senza bloccare l'interfaccia
utente, e questo codice viene eseguito
all'interno della coroutine.

48
04:18.510 --> 04:22.320
Richiama il metodo insert sull'oggetto
repository.

49
04:22.320 --> 04:24.240
Passaggio del parametro nodo.

50
04:24.270 --> 04:31.020
Il metodo insert esegue l'inserimento
effettivo del nodo nel database
utilizzando le coroutine.

51
04:31.020 --> 04:39.030
Questa operazione viene eseguita in modo
asincrono, il che significa che

52
04:39.030 --> 04:40.710
non blocca il thread principale e quindi
mantiene l'interfaccia utente reattiva.

53
04:40.710 --> 04:47.820
Per questo, utilizziamo il ViewModel dot
launch, che è

54
04:47.820 --> 04:48.720
una coroutine, e chiamiamo questo
repository dot insert node.

55
04:48.720 --> 04:54.810
E se torniamo al repository, possiamo
vedere che questo nodo insert è una
funzione di sospensione.

56
04:54.840 --> 04:59.820
La funzione Suspend deve essere chiamata
all'interno dell'ambito ViewModel.

57
04:59.820 --> 05:07.350
Utilizzando l'ambito del ViewModel, la
coroutine è legata al

58
05:07.350 --> 05:08.010
ciclo di vita del ViewModel, garantendo la
sua cancellazione.

59
05:08.010 --> 05:11.010
Se il ViewModel viene cancellato.


