Ir ao contido principal

Registro de peso

#Rexistro de peso

Pantalla de rexistro​

Permite ao usuario rexistrar o seu peso corporal diario e visualizar a evolución ao longo do tempo mediante un gráfico de liñas debuxado coa API Canvas de Compose.

Carga de datos​

Ao inicializar a pantalla, consúltase a táboa Supabase peso_usuario, filtrando por id_usuario e ordenando os resultados en orde ascendente por data. Os rexistros almacénanse no estado registros: List<PesoUsuario>.

Restrición dunha inscrición por día​

A pantalla comproba se xa existe un rexistro para a data actual (fechaHoy) antes de mostrar o campo de entrada. A variable yaExisteHoy calcúlase comparando a data de cada rexistro coa data do sistema:

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

Se xa existe un rexistro para hoxe, o campo de entrada está oculto e móstrase unha mensaxe informativa. Esta restrición é exclusivamente a nivel de IU, non hai ningunha restrición UNIQUE na base de datos para esta combinación de columnas.

Inserción dun novo rexistro​

O usuario introduce o peso no campo de texto (acepta valores decimais) e preme o botón de confirmación. Un insert execútase en Supabase co id_usuario, o valor de peso e a data actual.

Editando un rexistro existente​

Cada fila da lista inclúe un botón de edición que activa o modo de edición en liña (editandoId). Despois da confirmación, execútase un update en Supabase no rexistro identificado polo seu id.

Eliminando un rexistro​

O botón de eliminación de cada fila executa un delete en Supabase filtrando por id do rexistro.

Gráfico de evolución​

O gráfico está debuxado co Canvas de Jetpack Compose. A implementación normaliza os valores de peso ao intervalo [0, 1] en relación co mínimo e o máximo do historial, mapea con coordenadas de píxeles no lenzo e úneos con liñas usando drawPath. Cada punto está representado por un círculo cheo.

O eixe horizontal representa o tempo (as entradas están ordenadas cronoloxicamente) e o eixe vertical representa o peso en quilogramos. Os valores mínimos e máximos móstranse como etiquetas de texto nos extremos do eixe.

Se o historial contén menos de dous puntos, o gráfico non se renderiza (se necesitan polo menos dous puntos para trazar unha liña).