Dans cette partie nous allons développer un écran simple pour afficher des actualités Dwitch, avec le design pattern MVVM.

Il va nous ĂŞtre utilse pour comprendre et appliquer de nouvelles notions :
🛟 MVVM
{
"data": [
{
"id": 17,
"documentId": "z7knpkka6l7nac4hic1b779s",
"title": "Collaboration avec les Fromagers des Aravis",
"content": "Dwitch s'associe aux Fromagers des Aravis pour vous proposer une sélection exclusive de fromages AOP dans nos sandwichs. Reblochon, Tomme, Abondance... Des produits d'exception sélectionnés avec soin pour des saveurs authentiques !",
"createdAt": "2024-12-07T12:33:39.870Z",
"updatedAt": "2024-12-07T12:38:10.543Z",
"publishedAt": "2024-12-07T12:38:10.680Z",
"medias": [
{
"id": 26,
"documentId": "jh4lhm3vcscyvn8aviym0z02",
"name": "snacking-7.jpg",
"alternativeText": null,
"caption": null,
"width": 1400,
"height": 932,
"formats": {
"large": {
"ext": ".jpg",
"url": "/uploads/large_snacking_7_67506e1580.jpg",
"hash": "large_snacking_7_67506e1580",
"mime": "image/jpeg",
"name": "large_snacking-7.jpg",
"path": null,
"size": 76.74,
"width": 1000,
"height": 666,
"sizeInBytes": 76744
},
"small": {
"ext": ".jpg",
"url": "/uploads/small_snacking_7_67506e1580.jpg",
"hash": "small_snacking_7_67506e1580",
"mime": "image/jpeg",
"name": "small_snacking-7.jpg",
"path": null,
"size": 25.83,
"width": 500,
"height": 333,
"sizeInBytes": 25829
},
"medium": {
"ext": ".jpg",
"url": "/uploads/medium_snacking_7_67506e1580.jpg",
"hash": "medium_snacking_7_67506e1580",
"mime": "image/jpeg",
"name": "medium_snacking-7.jpg",
"path": null,
"size": 48.96,
"width": 750,
"height": 499,
"sizeInBytes": 48964
},
"thumbnail": {
"ext": ".jpg",
"url": "/uploads/thumbnail_snacking_7_67506e1580.jpg",
"hash": "thumbnail_snacking_7_67506e1580",
"mime": "image/jpeg",
"name": "thumbnail_snacking-7.jpg",
"path": null,
"size": 8.2,
"width": 234,
"height": 156,
"sizeInBytes": 8195
}
},
"hash": "snacking_7_67506e1580",
"ext": ".jpg",
"mime": "image/jpeg",
"size": 431.83,
"url": "/uploads/snacking_7_67506e1580.jpg",
"previewUrl": null,
"provider": "local",
"provider_metadata": null,
"createdAt": "2024-12-07T12:37:53.181Z",
"updatedAt": "2024-12-07T12:37:53.181Z",
"publishedAt": "2024-12-07T12:37:53.186Z"
}
]
},
]
}
🛑 Attention
Ne codez pas encore la vue, travaillez avec le ViewModel et les modèles de données pour récupérer les actualités puis affichez les dans Timber.
ViewModelViewModel pour les actualités -> NewsViewModel ou PostViewModelloadNews() par exemple/posts)🍒 Si vous êtes chaud
Utilisez les flows pour gérer les données de manière plus propre et plus moderne.

ViewModel à votre vueUIState pour gérer les étatsAsyncImage de Coil par exemple -> Installez la dépendance CoilviewModelScope pour lancer les appels réseau de manière asynchrone/api)🎒 UI State
Dans les ressources vous trouverez des exemples pour gérer les états de votre interface utilisateur.
CircularProgressIndicator lors du chargement, un message d’erreur en cas d’erreur, un message de succès si la liste est vide, et les news si tout s’est bien passé.🌆 Images & Coil
👌 Bravo !
Vous avez encore appris pas mal de notions importantes pour le développement Android moderne.