Passer au contenu principal

Enregistrement de poids

Écran d'enregistrement​

Il permet à l'utilisateur d'enregistrer son poids corporel quotidien et de visualiser l'évolution dans le temps à l'aide d'un graphique linéaire dessiné avec l'API Canvas de Compose.

Téléchargement de données​

Lors de l'initialisation de l'écran, la table Supabase peso_usuario est consultée en filtrant par id_usuario et en classant les résultats par ordre croissant de date. Les registres sont stockés dans l'état registros: List<PesoUsuario>.

Restriction d'une inscription par jour​

L'écran vérifie si un enregistrement existe déjà pour la date du jour (fechaHoy) avant d'afficher le champ de saisie. La variable yaExisteHoy est calculée en comparant la date de chaque enregistrement avec la date système :

val fechaHoy = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date())
val yaExisteHoy = registros.any { it.fecha == fechaHoy }

Si un enregistrement existe déjà pour aujourd'hui, le champ de saisie est masqué et un message d'information s'affiche. Cette restriction est exclusivement au niveau de l'interface utilisateur, il n'y a pas de restriction UNIQUE dans la base de données pour cette combinaison de colonnes.

Insertion d'un nouvel enregistrement​

L'utilisateur saisit le poids dans le champ de texte (accepte les valeurs décimales) et appuie sur le bouton de confirmation. Un insert est exécuté dans Supabase avec le id_usuario, la valeur du poids et la date du jour.

Modification d'un enregistrement existant​

Chaque ligne de la liste comprend un bouton d'édition qui active le mode d'édition en ligne (editandoId). Lors de la validation, un update est exécuté dans Supabase sur l'enregistrement identifié par son id.

Supprimer un enregistrement​

Le bouton Supprimer pour chaque ligne exécute un delete dans Supabase filtrant par id de l'enregistrement.

Graphique d'évolution​

Le graphique est dessiné avec le Canvas de Jetpack Compose. L'implémentation normalise les valeurs de poids dans la plage [0, 1] par rapport au minimum et au maximum de l'historique, les mappe aux coordonnées de pixels sur le canevas et les joint avec des lignes à l'aide de drawPath. Chaque point est représenté par un cercle plein.

L'axe horizontal représente le temps (les entrées sont classées chronologiquement) et l'axe vertical représente le poids en kilogrammes. Les valeurs minimales et maximales sont affichées sous forme d'étiquettes de texte aux extrémités de l'axe.

Si l'historique contient moins de deux points, le graphique n'est pas rendu (il faut au moins deux points pour tracer une ligne).