Scolaire
TheSpoon — application Android de recherche de recettes
Application Android en Kotlin et Jetpack Compose réalisée en binôme pour rechercher des recettes via une API distante, avec un cache local Room.
Ma contribution
J'ai réalisé l'ensemble de l'implémentation technique de l'application : interface Jetpack Compose, gestion de l'état, appels API, recherche, navigation, fiche recette et persistance locale avec Room. Mon coéquipier a pris en charge la documentation et le support de présentation.
Points clés
- Interface entièrement en Jetpack Compose, de l'écran de chargement à la fiche recette
- Recherche de recettes via l'API Food2Fork, avec des filtres rapides par mots-clés
- Recettes récupérées enregistrées dans une base locale Room
Objectif
Développer une application Android de recherche de recettes de cuisine, alimentée par une API distante réelle, Food2Fork, et capable de conserver localement les recettes déjà consultées.
Architecture
L’application, écrite en Kotlin, repose sur une Activity unique et une interface entièrement construite avec Jetpack Compose et Material 3. La navigation relie trois écrans : un écran de chargement, l’accueil avec la recherche et la liste, et la fiche d’une recette. L’état de l’interface est centralisé dans un ViewModel qui expose des StateFlow ; les appels réseau et les accès à la base s’exécutent dans des coroutines. Les requêtes HTTP passent par Ktor, les réponses JSON sont décodées avec kotlinx.serialization et les images sont chargées par Coil.
Fonctionnalités
- Recherche de recettes par titre.
- Filtres rapides : quelques mots-clés prédéfinis (pâtes, poulet, desserts…) qui relancent une recherche.
- Liste de résultats avec image et titre, menant à la fiche de chaque recette.
- Fiche recette : image, titre, ingrédients, date de mise à jour et éditeur.
Cache local
Chaque recette récupérée est enregistrée dans une base locale Room, avec insertion ou remplacement si elle existe déjà. L’application peut relire une recette par son identifiant ou un ensemble de recettes, et ce cache sert aussi à alimenter l’affichage lorsque l’appel distant échoue.
Limites
Le projet est resté un prototype académique. La pagination et certaines fonctions prévues dans la documentation n’ont pas été finalisées, et le cache local constitue un mécanisme de repli partiel plutôt qu’un véritable mode hors ligne.