diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 4644b7d0..c23aa6c5 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -346,7 +346,8 @@ "@logged": { "description": "Header for the column of 'logged' nutritional values, i.e. what was eaten" }, - "loggedToday": "LoggedToday", + "today": "Today", + "loggedToday": "Logged today", "weekAverage": "7 day average", "@weekAverage": { "description": "Header for the column of '7 day average' nutritional values, i.e. what was logged last week" diff --git a/lib/models/nutrition/nutritional_plan.dart b/lib/models/nutrition/nutritional_plan.dart index 7acae977..51119c8a 100644 --- a/lib/models/nutrition/nutritional_plan.dart +++ b/lib/models/nutrition/nutritional_plan.dart @@ -91,26 +91,44 @@ class NutritionalPlan { return description != '' ? description : AppLocalizations.of(context).nutritionalPlan; } + bool get hasAnyGoals { + return goalEnergy != null || + goalFat != null || + goalProtein != null || + goalCarbohydrates != null; + } + /// Calculations - NutritionalValues get nutritionalValues { - // This is already done on the server. It might be better to read it from there. + /// + /// note that (some of) this is already done on the server. It might be better + /// to read it from there, but on the other hand we might want to do more locally + /// so that a mostly offline mode is possible. + NutritionalValues get plannedNutritionalValues { var out = NutritionalValues(); - for (final meal in meals) { - out += meal.plannedNutritionalValues; + // If there are set goals, they take preference over any meals + if (hasAnyGoals) { + out.energy = goalEnergy != null ? goalEnergy!.toDouble() : 0; + out.fat = goalFat != null ? goalFat!.toDouble() : 0; + out.carbohydrates = goalCarbohydrates != null ? goalCarbohydrates!.toDouble() : 0; + out.protein = goalProtein != null ? goalProtein!.toDouble() : 0; + } else { + for (final meal in meals) { + out += meal.plannedNutritionalValues; + } } return out; } - NutritionalValues get nutritionalValuesToday { + NutritionalValues get loggedNutritionalValuesToday { final now = DateTime.now(); final today = DateTime(now.year, now.month, now.day); return logEntriesValues.containsKey(today) ? logEntriesValues[today]! : NutritionalValues(); } - NutritionalValues get nutritionalValues7DayAvg { + NutritionalValues get loggedNutritionalValues7DayAvg { final currentDate = DateTime.now(); final sevenDaysAgo = currentDate.subtract(const Duration(days: 7)); diff --git a/lib/widgets/dashboard/widgets.dart b/lib/widgets/dashboard/widgets.dart index 5c2e7a60..901c499d 100644 --- a/lib/widgets/dashboard/widgets.dart +++ b/lib/widgets/dashboard/widgets.dart @@ -191,7 +191,7 @@ class _DashboardNutritionWidgetState extends State { Container( padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 15), height: 180, - child: FlNutritionalPlanPieChartWidget(_plan!.nutritionalValues), + child: FlNutritionalPlanPieChartWidget(_plan!.plannedNutritionalValues), ) ], )) diff --git a/lib/widgets/nutrition/charts.dart b/lib/widgets/nutrition/charts.dart index 9db1360a..625a300b 100644 --- a/lib/widgets/nutrition/charts.dart +++ b/lib/widgets/nutrition/charts.dart @@ -211,9 +211,9 @@ class NutritionalDiaryChartWidgetFlState extends State { //text:widget._plan.description + // TODO: read the values from the form bool _onlyLogging = true; bool _addGoals = false; diff --git a/lib/widgets/nutrition/nutritional_diary_detail.dart b/lib/widgets/nutrition/nutritional_diary_detail.dart index d1080e4f..73b1cbf7 100644 --- a/lib/widgets/nutrition/nutritional_diary_detail.dart +++ b/lib/widgets/nutrition/nutritional_diary_detail.dart @@ -208,7 +208,7 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { @override Widget build(BuildContext context) { - final valuesTotal = _nutritionalPlan.nutritionalValues; + final valuesTotal = _nutritionalPlan.plannedNutritionalValues; final valuesDate = _nutritionalPlan.getValuesForDate(_date); final logs = _nutritionalPlan.getLogsForDate(_date); diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart index ecf172b7..b14557f8 100644 --- a/lib/widgets/nutrition/nutritional_plan_detail.dart +++ b/lib/widgets/nutrition/nutritional_plan_detail.dart @@ -40,7 +40,7 @@ class NutritionalPlanDetailWidget extends StatelessWidget { @override Widget build(BuildContext context) { - final nutritionalValues = _nutritionalPlan.nutritionalValues; + final nutritionalValues = _nutritionalPlan.plannedNutritionalValues; final valuesPercentage = _nutritionalPlan.energyPercentage(nutritionalValues); final lastWeightEntry = Provider.of(context, listen: false).getNewestEntry(); @@ -240,7 +240,7 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ), Indicator( color: LIST_OF_COLORS3[1], - text: AppLocalizations.of(context).logged, + text: AppLocalizations.of(context).today, isSquare: true, marginRight: 0, ), diff --git a/test/nutrition/nutritional_plan_model_test.dart b/test/nutrition/nutritional_plan_model_test.dart index 5dd27bd1..a832d006 100644 --- a/test/nutrition/nutritional_plan_model_test.dart +++ b/test/nutrition/nutritional_plan_model_test.dart @@ -32,7 +32,7 @@ void main() { group('model tests', () { test('Test the nutritionalValues method for nutritional plans', () { final values = NutritionalValues.values(4118.75, 32.75, 347.5, 9.5, 59.0, 37.75, 52.5, 30.5); - expect(plan.nutritionalValues, values); + expect(plan.plannedNutritionalValues, values); }); test('Test the nutritionalValues method for meals', () {