Frozen-Burrito / hydrate-app

Repositorio para la app de apoyo de la botella hydrate, desarrollada con Flutter.
2 stars 0 forks source link

El progreso total de una meta no es correcto #9

Closed Frozen-Burrito closed 2 years ago

Frozen-Burrito commented 2 years ago

Problema

El indicador de progreso lineal de todas las metas esta completado al 100% (su valor es 1.0). Es raro, dados los totales de los registros de hidratación de días pasados y los periodos de las metas.

Tareas

Frozen-Burrito commented 2 years ago

Otro problema relacionado a los cambios introducidos para el progreso de metas es en la gráfica de hidratación por día. Los totales incluyen el día de hoy, por lo que. aunque el último registro sea del día de ayer, será mostrado en la gráfica como si fuera de hoy.

Frozen-Burrito commented 2 years ago

Cuando la app inicia, los progresos de las metas siempre son 0. Al navegar a una nueva vista, los valores obtenidos por GoalSliverList son actualizados con las sumas totales.

Output en consola como ejemplo:

I/flutter (27285): Progress towards goals: [0, 0, 0]
I/flutter (27285): Progress towards goals: [0, 0, 0]
I/flutter (27285): Progress towards goals: [0, 0, 0]
I/flutter (27285): Progress towards goals: [1839, 1581, 1938] // <-- Aquí se navegó a la página de ajustes.
I/flutter (27285): Progress towards goals: [1839, 1581, 1938] // <-- Son mostrados cuando se cambia de tab en la vista principal.
I/flutter (27285): Progress towards goals: [1839, 1581, 1938]

Probablemente no hay sincronización adecuada entre HydrationRecordProvider y GoalProvider. (Se necesitan las metas Y los registros de hidratación para obtener el progreso)

Frozen-Burrito commented 2 years ago

Los totales tampoco son correctos y tienen fechas incongruentes.

Frozen-Burrito commented 2 years ago

Todos los problemas solucionados:

  1. Los totales eran incorrectos porque int daysOfRecords = max(diffBetweenDates.inDays, goal.term.inDays); siempre resultaba en el valor mayor ( si diffBetweenDates era 8 y la meta era diaria con goal.term.inDays == 1, se obtenían registros de 8 días en vez de solo 1. Esto fue arreglado usando min() en vez de max().
  2. Se creó una microtask para obtener las metas de hidratación y los registros de hidratación para calcular el progreso de metas de forma asíncrona.
  3. Los totales usados en la gráfica de hidratación diaria eran ordenados por fecha descendiente, con los más recientes primero. La gráfica usa orden ascendiente, por lo que se invierte el orden de los totales condicionalmente.