From b402f445a2b5028a38772ecb3e09daeaaed0f05b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandi=20Milohani=C4=87?= Date: Wed, 27 Oct 2021 18:01:43 +0200 Subject: [PATCH 1/4] Add quick access to logged products #79 --- lib/l10n/app_en.arb | 4 ++ lib/widgets/nutrition/forms.dart | 50 ++++++++++++++++++- lib/widgets/nutrition/meal.dart | 16 +++++- .../nutrition/nutritional_plan_detail.dart | 14 +++++- 4 files changed, 81 insertions(+), 3 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 6c9235b7..6133b1fa 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -480,6 +480,10 @@ "@selectIngredient": { "description": "Error message when the user hasn't selected an ingredient from the autocompleter" }, + "recentlyUsedIngredients": "Recently used ingredients. Please select one of ingredients.", + "@recentlyUsedIngredients": { + "description": "A message when a user adds a new ingredient to a meal." + }, "selectImage": "Please select an image", "@selectImage": { "description": "Label and error message when the user hasn't selected an image to save" diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart index f87aa94e..c567cc5a 100644 --- a/lib/widgets/nutrition/forms.dart +++ b/lib/widgets/nutrition/forms.dart @@ -29,6 +29,7 @@ import 'package:wger/models/nutrition/meal_item.dart'; import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/providers/nutrition.dart'; import 'package:wger/screens/nutritional_plan_screen.dart'; +import 'package:wger/widgets/nutrition/meal.dart'; class MealForm extends StatelessWidget { late Meal _meal; @@ -115,8 +116,9 @@ class MealForm extends StatelessWidget { class MealItemForm extends StatelessWidget { final Meal _meal; late MealItem _mealItem; + final List _listOfIngredientMeal; - MealItemForm(this._meal, [mealItem]) { + MealItemForm(this._meal, this._listOfIngredientMeal, [mealItem]) { _mealItem = mealItem ?? MealItem.empty(); _mealItem.mealId = _meal.id!; } @@ -127,6 +129,7 @@ class MealItemForm extends StatelessWidget { @override Widget build(BuildContext context) { + final String unit = AppLocalizations.of(context).g; return Container( margin: EdgeInsets.all(20), child: Form( @@ -200,6 +203,51 @@ class MealItemForm extends StatelessWidget { Navigator.of(context).pop(); }, ), + if (_listOfIngredientMeal.isNotEmpty) SizedBox(height: 10.0), + Container( + child: Text(AppLocalizations.of(context).recentlyUsedIngredients), + padding: EdgeInsets.all(10.0)), + Expanded( + child: Scrollbar( + isAlwaysShown: true, + child: ListView.builder( + itemCount: _listOfIngredientMeal.length, + shrinkWrap: true, + itemBuilder: (context, index) { + return Column( + children: [ + SizedBox( + width: double.infinity, + child: Row( + children: [ + Flexible( + child: TextButton( + child: Text( + '${_listOfIngredientMeal[index].ingredientQuantity.toStringAsFixed(0)}$unit ${_listOfIngredientMeal[index].ingredientName}', + overflow: TextOverflow.ellipsis, + ), + onPressed: () { + _ingredientController.text = + _listOfIngredientMeal[index].ingredientName; + _amountController.text = + _listOfIngredientMeal[index] + .ingredientQuantity + .toStringAsFixed(0); + _mealItem.ingredientId = + _listOfIngredientMeal[index].ingredientCode; + _mealItem.amount = _listOfIngredientMeal[index] + .ingredientQuantity; + }, + )), + ], + ), + ), + ], + ); + }, + ), + ), + ) ], ), ), diff --git a/lib/widgets/nutrition/meal.dart b/lib/widgets/nutrition/meal.dart index b9300276..d37cdb07 100644 --- a/lib/widgets/nutrition/meal.dart +++ b/lib/widgets/nutrition/meal.dart @@ -30,9 +30,11 @@ import 'package:wger/widgets/nutrition/helpers.dart'; class MealWidget extends StatefulWidget { final Meal _meal; + final List _listOfIngredientMeal; const MealWidget( this._meal, + this._listOfIngredientMeal, ); @override @@ -127,7 +129,7 @@ class _MealWidgetState extends State { FormScreen.routeName, arguments: FormScreenArguments( AppLocalizations.of(context).addIngredient, - MealItemForm(widget._meal), + MealItemForm(widget._meal, widget._listOfIngredientMeal), hasListView: true, ), ); @@ -140,6 +142,18 @@ class _MealWidgetState extends State { } } +class IngredientMeal { + final int ingredientCode; + final num ingredientQuantity; + final String ingredientName; + + const IngredientMeal( + this.ingredientCode, + this.ingredientQuantity, + this.ingredientName, + ); +} + class MealItemWidget extends StatelessWidget { final bool _expanded; final MealItem _item; diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart index 529637a8..19b4b363 100644 --- a/lib/widgets/nutrition/nutritional_plan_detail.dart +++ b/lib/widgets/nutrition/nutritional_plan_detail.dart @@ -44,11 +44,23 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ? _nutritionalPlan.gPerBodyKg(lastWeightEntry.weight, nutritionalValues) : null; + final List listOfIngredientMeal = []; + for (final meal in _nutritionalPlan.meals) { + for (final mealItems in meal.mealItems) { + final ingredientInList = listOfIngredientMeal.where( + (element) => element.ingredientCode == mealItems.ingredientId); + if (ingredientInList.isEmpty) { + listOfIngredientMeal.add(IngredientMeal(mealItems.ingredientId, + mealItems.amount, mealItems.ingredientObj.name)); + } + } + } + return SliverList( delegate: SliverChildListDelegate( [ SizedBox(height: 10), - ..._nutritionalPlan.meals.map((meal) => MealWidget(meal)).toList(), + ..._nutritionalPlan.meals.map((meal) => MealWidget(meal, listOfIngredientMeal)).toList(), Padding( padding: const EdgeInsets.all(8.0), child: ElevatedButton( From a87351b470863ad655c829161171a8a157a5c64b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandi=20Milohani=C4=87?= Date: Thu, 28 Oct 2021 11:08:51 +0200 Subject: [PATCH 2/4] Code fixing --- lib/widgets/nutrition/forms.dart | 17 +++++++---------- lib/widgets/nutrition/helpers.dart | 17 +++++++++++++++++ lib/widgets/nutrition/meal.dart | 15 ++------------- .../nutrition/nutritional_plan_detail.dart | 14 +++----------- 4 files changed, 29 insertions(+), 34 deletions(-) diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart index c567cc5a..a334f102 100644 --- a/lib/widgets/nutrition/forms.dart +++ b/lib/widgets/nutrition/forms.dart @@ -24,12 +24,12 @@ import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/json.dart'; import 'package:wger/helpers/ui.dart'; +import 'package:wger/models/nutrition/log.dart'; import 'package:wger/models/nutrition/meal.dart'; import 'package:wger/models/nutrition/meal_item.dart'; import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/providers/nutrition.dart'; import 'package:wger/screens/nutritional_plan_screen.dart'; -import 'package:wger/widgets/nutrition/meal.dart'; class MealForm extends StatelessWidget { late Meal _meal; @@ -116,7 +116,7 @@ class MealForm extends StatelessWidget { class MealItemForm extends StatelessWidget { final Meal _meal; late MealItem _mealItem; - final List _listOfIngredientMeal; + final List _listOfIngredientMeal; MealItemForm(this._meal, this._listOfIngredientMeal, [mealItem]) { _mealItem = mealItem ?? MealItem.empty(); @@ -223,20 +223,17 @@ class MealItemForm extends StatelessWidget { Flexible( child: TextButton( child: Text( - '${_listOfIngredientMeal[index].ingredientQuantity.toStringAsFixed(0)}$unit ${_listOfIngredientMeal[index].ingredientName}', + '${_listOfIngredientMeal[index].amount.toStringAsFixed(0)}$unit ${_listOfIngredientMeal[index].ingredientObj.name}', overflow: TextOverflow.ellipsis, ), onPressed: () { _ingredientController.text = - _listOfIngredientMeal[index].ingredientName; + _listOfIngredientMeal[index].ingredientObj.name; _amountController.text = - _listOfIngredientMeal[index] - .ingredientQuantity - .toStringAsFixed(0); + _listOfIngredientMeal[index].amount.toStringAsFixed(0); _mealItem.ingredientId = - _listOfIngredientMeal[index].ingredientCode; - _mealItem.amount = _listOfIngredientMeal[index] - .ingredientQuantity; + _listOfIngredientMeal[index].ingredientId; + _mealItem.amount = _listOfIngredientMeal[index].amount; }, )), ], diff --git a/lib/widgets/nutrition/helpers.dart b/lib/widgets/nutrition/helpers.dart index 582282b4..70ed9388 100644 --- a/lib/widgets/nutrition/helpers.dart +++ b/lib/widgets/nutrition/helpers.dart @@ -18,6 +18,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:wger/models/nutrition/log.dart'; +import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/models/nutrition/nutritrional_values.dart'; import 'package:wger/widgets/core/core.dart'; @@ -48,3 +50,18 @@ List getMutedNutritionalValues(NutritionalValues values, BuildContext co ]; return out; } +List listOfIngredientsLog(NutritionalPlan nutritionalPlan) { + final List listOfIngredientMeal = []; + for (final meal in nutritionalPlan.meals) { + for (final mealItem in meal.mealItems) { + final ingredientInList = + listOfIngredientMeal.where((element) => element.ingredientId == mealItem.ingredientId); + if (ingredientInList.isEmpty) { + final log = Log.fromMealItem(mealItem, nutritionalPlan.id!, mealItem.id!); + log.ingredientObj = mealItem.ingredientObj; + listOfIngredientMeal.add(log); + } + } + } + return listOfIngredientMeal; +} \ No newline at end of file diff --git a/lib/widgets/nutrition/meal.dart b/lib/widgets/nutrition/meal.dart index d37cdb07..f69a3279 100644 --- a/lib/widgets/nutrition/meal.dart +++ b/lib/widgets/nutrition/meal.dart @@ -20,6 +20,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:provider/provider.dart'; import 'package:wger/helpers/consts.dart'; +import 'package:wger/models/nutrition/log.dart'; import 'package:wger/models/nutrition/meal.dart'; import 'package:wger/models/nutrition/meal_item.dart'; import 'package:wger/providers/nutrition.dart'; @@ -30,7 +31,7 @@ import 'package:wger/widgets/nutrition/helpers.dart'; class MealWidget extends StatefulWidget { final Meal _meal; - final List _listOfIngredientMeal; + final List _listOfIngredientMeal; const MealWidget( this._meal, @@ -142,18 +143,6 @@ class _MealWidgetState extends State { } } -class IngredientMeal { - final int ingredientCode; - final num ingredientQuantity; - final String ingredientName; - - const IngredientMeal( - this.ingredientCode, - this.ingredientQuantity, - this.ingredientName, - ); -} - class MealItemWidget extends StatelessWidget { final bool _expanded; final MealItem _item; diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart index 19b4b363..5296168d 100644 --- a/lib/widgets/nutrition/nutritional_plan_detail.dart +++ b/lib/widgets/nutrition/nutritional_plan_detail.dart @@ -20,6 +20,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; +import 'package:wger/models/nutrition/log.dart'; import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/models/nutrition/nutritrional_values.dart'; import 'package:wger/providers/body_weight.dart'; @@ -28,6 +29,7 @@ import 'package:wger/screens/nutritional_diary_screen.dart'; import 'package:wger/theme/theme.dart'; import 'package:wger/widgets/nutrition/charts.dart'; import 'package:wger/widgets/nutrition/forms.dart'; +import 'package:wger/widgets/nutrition/helpers.dart'; import 'package:wger/widgets/nutrition/meal.dart'; class NutritionalPlanDetailWidget extends StatelessWidget { @@ -44,17 +46,7 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ? _nutritionalPlan.gPerBodyKg(lastWeightEntry.weight, nutritionalValues) : null; - final List listOfIngredientMeal = []; - for (final meal in _nutritionalPlan.meals) { - for (final mealItems in meal.mealItems) { - final ingredientInList = listOfIngredientMeal.where( - (element) => element.ingredientCode == mealItems.ingredientId); - if (ingredientInList.isEmpty) { - listOfIngredientMeal.add(IngredientMeal(mealItems.ingredientId, - mealItems.amount, mealItems.ingredientObj.name)); - } - } - } + final List listOfIngredientMeal = listOfIngredientsLog(_nutritionalPlan); return SliverList( delegate: SliverChildListDelegate( From cfed2219745e4d44eef96cdc0f6ffa5672bb4126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandi=20Milohani=C4=87?= Date: Thu, 28 Oct 2021 11:14:09 +0200 Subject: [PATCH 3/4] fix --- lib/widgets/nutrition/forms.dart | 2 +- lib/widgets/nutrition/nutritional_plan_detail.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart index a334f102..92535f5a 100644 --- a/lib/widgets/nutrition/forms.dart +++ b/lib/widgets/nutrition/forms.dart @@ -115,7 +115,7 @@ class MealForm extends StatelessWidget { class MealItemForm extends StatelessWidget { final Meal _meal; - late MealItem _mealItem; + late final MealItem _mealItem; final List _listOfIngredientMeal; MealItemForm(this._meal, this._listOfIngredientMeal, [mealItem]) { diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart index 5296168d..9c4c4ede 100644 --- a/lib/widgets/nutrition/nutritional_plan_detail.dart +++ b/lib/widgets/nutrition/nutritional_plan_detail.dart @@ -51,7 +51,7 @@ class NutritionalPlanDetailWidget extends StatelessWidget { return SliverList( delegate: SliverChildListDelegate( [ - SizedBox(height: 10), + const SizedBox(height: 10), ..._nutritionalPlan.meals.map((meal) => MealWidget(meal, listOfIngredientMeal)).toList(), Padding( padding: const EdgeInsets.all(8.0), From ff0e6758601be3fbd3297e811bb0b84b08f56c30 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Thu, 28 Oct 2021 18:00:18 +0200 Subject: [PATCH 4/4] Some refactoring for last used ingredients It's easier to just use the already existing meal items rather than create new logs that have the same infos. --- lib/l10n/app_en.arb | 2 +- lib/models/nutrition/nutritional_plan.dart | 18 +++++ lib/widgets/nutrition/forms.dart | 73 +++++++------------ lib/widgets/nutrition/helpers.dart | 17 ----- lib/widgets/nutrition/meal.dart | 7 +- .../nutrition/nutritional_plan_detail.dart | 10 +-- test/nutritional_plan_model_test.dart | 13 +++- 7 files changed, 64 insertions(+), 76 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 8a2b5622..77c192e5 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -480,7 +480,7 @@ "@selectIngredient": { "description": "Error message when the user hasn't selected an ingredient from the autocompleter" }, - "recentlyUsedIngredients": "Recently used ingredients. Please select one of ingredients.", + "recentlyUsedIngredients": "Recently added ingredients", "@recentlyUsedIngredients": { "description": "A message when a user adds a new ingredient to a meal." }, diff --git a/lib/models/nutrition/nutritional_plan.dart b/lib/models/nutrition/nutritional_plan.dart index 88a98f89..be71cea5 100644 --- a/lib/models/nutrition/nutritional_plan.dart +++ b/lib/models/nutrition/nutritional_plan.dart @@ -21,6 +21,7 @@ import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/json.dart'; import 'package:wger/models/nutrition/log.dart'; import 'package:wger/models/nutrition/meal.dart'; +import 'package:wger/models/nutrition/meal_item.dart'; import 'nutritrional_values.dart'; @@ -134,4 +135,21 @@ class NutritionalPlan { return out; } + + /// Helper that returns all meal items for the current plan + /// + /// Duplicated ingredients are removed + List get allMealItems { + final List out = []; + for (final meal in meals) { + for (final mealItem in meal.mealItems) { + final ingredientInList = out.where((e) => e.ingredientId == mealItem.ingredientId); + + if (ingredientInList.isEmpty) { + out.add(mealItem); + } + } + } + return out; + } } diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart index 950603a7..3a5a58b4 100644 --- a/lib/widgets/nutrition/forms.dart +++ b/lib/widgets/nutrition/forms.dart @@ -24,7 +24,6 @@ import 'package:wger/exceptions/http_exception.dart'; import 'package:wger/helpers/consts.dart'; import 'package:wger/helpers/json.dart'; import 'package:wger/helpers/ui.dart'; -import 'package:wger/models/nutrition/log.dart'; import 'package:wger/models/nutrition/meal.dart'; import 'package:wger/models/nutrition/meal_item.dart'; import 'package:wger/models/nutrition/nutritional_plan.dart'; @@ -116,10 +115,10 @@ class MealForm extends StatelessWidget { class MealItemForm extends StatelessWidget { final Meal _meal; late final MealItem _mealItem; - - final List _listOfIngredientMeal; - MealItemForm(this._meal, this._listOfIngredientMeal, [mealItem]) { + final List _listMealItems; + + MealItemForm(this._meal, this._listMealItems, [mealItem]) { _mealItem = mealItem ?? MealItem.empty(); _mealItem.mealId = _meal.id!; } @@ -130,7 +129,7 @@ class MealItemForm extends StatelessWidget { @override Widget build(BuildContext context) { - final String unit = AppLocalizations.of(context).g; + final String unit = AppLocalizations.of(context).g; return Container( margin: const EdgeInsets.all(20), child: Form( @@ -204,48 +203,32 @@ class MealItemForm extends StatelessWidget { Navigator.of(context).pop(); }, ), - if (_listOfIngredientMeal.isNotEmpty) SizedBox(height: 10.0), + if (_listMealItems.isNotEmpty) const SizedBox(height: 10.0), Container( child: Text(AppLocalizations.of(context).recentlyUsedIngredients), - padding: EdgeInsets.all(10.0)), - Expanded( - child: Scrollbar( - isAlwaysShown: true, - child: ListView.builder( - itemCount: _listOfIngredientMeal.length, - shrinkWrap: true, - itemBuilder: (context, index) { - return Column( - children: [ - SizedBox( - width: double.infinity, - child: Row( - children: [ - Flexible( - child: TextButton( - child: Text( - '${_listOfIngredientMeal[index].amount.toStringAsFixed(0)}$unit ${_listOfIngredientMeal[index].ingredientObj.name}', - overflow: TextOverflow.ellipsis, - ), - onPressed: () { - _ingredientController.text = - _listOfIngredientMeal[index].ingredientObj.name; - _amountController.text = - _listOfIngredientMeal[index].amount.toStringAsFixed(0); - _mealItem.ingredientId = - _listOfIngredientMeal[index].ingredientId; - _mealItem.amount = _listOfIngredientMeal[index].amount; - }, - )), - ], - ), - ), - ], - ); - }, - ), - ), - ) + padding: const EdgeInsets.all(10.0), + ), + Expanded( + child: ListView.builder( + itemCount: _listMealItems.length, + shrinkWrap: true, + itemBuilder: (context, index) { + return Card( + child: ListTile( + onTap: () { + _ingredientController.text = _listMealItems[index].ingredientObj.name; + _amountController.text = _listMealItems[index].amount.toStringAsFixed(0); + _mealItem.ingredientId = _listMealItems[index].ingredientId; + _mealItem.amount = _listMealItems[index].amount; + }, + title: Text(_listMealItems[index].ingredientObj.name), + subtitle: Text('${_listMealItems[index].amount.toStringAsFixed(0)}$unit'), + trailing: const Icon(Icons.copy), + ), + ); + }, + ), + ) ], ), ), diff --git a/lib/widgets/nutrition/helpers.dart b/lib/widgets/nutrition/helpers.dart index 70ed9388..582282b4 100644 --- a/lib/widgets/nutrition/helpers.dart +++ b/lib/widgets/nutrition/helpers.dart @@ -18,8 +18,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; -import 'package:wger/models/nutrition/log.dart'; -import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/models/nutrition/nutritrional_values.dart'; import 'package:wger/widgets/core/core.dart'; @@ -50,18 +48,3 @@ List getMutedNutritionalValues(NutritionalValues values, BuildContext co ]; return out; } -List listOfIngredientsLog(NutritionalPlan nutritionalPlan) { - final List listOfIngredientMeal = []; - for (final meal in nutritionalPlan.meals) { - for (final mealItem in meal.mealItems) { - final ingredientInList = - listOfIngredientMeal.where((element) => element.ingredientId == mealItem.ingredientId); - if (ingredientInList.isEmpty) { - final log = Log.fromMealItem(mealItem, nutritionalPlan.id!, mealItem.id!); - log.ingredientObj = mealItem.ingredientObj; - listOfIngredientMeal.add(log); - } - } - } - return listOfIngredientMeal; -} \ No newline at end of file diff --git a/lib/widgets/nutrition/meal.dart b/lib/widgets/nutrition/meal.dart index a4a873fb..432a52d1 100644 --- a/lib/widgets/nutrition/meal.dart +++ b/lib/widgets/nutrition/meal.dart @@ -20,7 +20,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:provider/provider.dart'; import 'package:wger/helpers/consts.dart'; -import 'package:wger/models/nutrition/log.dart'; import 'package:wger/models/nutrition/meal.dart'; import 'package:wger/models/nutrition/meal_item.dart'; import 'package:wger/providers/nutrition.dart'; @@ -31,11 +30,11 @@ import 'package:wger/widgets/nutrition/helpers.dart'; class MealWidget extends StatefulWidget { final Meal _meal; - final List _listOfIngredientMeal; + final List _listMealItems; const MealWidget( this._meal, - this._listOfIngredientMeal, + this._listMealItems, ); @override @@ -130,7 +129,7 @@ class _MealWidgetState extends State { FormScreen.routeName, arguments: FormScreenArguments( AppLocalizations.of(context).addIngredient, - MealItemForm(widget._meal, widget._listOfIngredientMeal), + MealItemForm(widget._meal, widget._listMealItems), hasListView: true, ), ); diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart index c8b97809..f4a0722f 100644 --- a/lib/widgets/nutrition/nutritional_plan_detail.dart +++ b/lib/widgets/nutrition/nutritional_plan_detail.dart @@ -20,7 +20,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; -import 'package:wger/models/nutrition/log.dart'; import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/models/nutrition/nutritrional_values.dart'; import 'package:wger/providers/body_weight.dart'; @@ -29,7 +28,6 @@ import 'package:wger/screens/nutritional_diary_screen.dart'; import 'package:wger/theme/theme.dart'; import 'package:wger/widgets/nutrition/charts.dart'; import 'package:wger/widgets/nutrition/forms.dart'; -import 'package:wger/widgets/nutrition/helpers.dart'; import 'package:wger/widgets/nutrition/meal.dart'; class NutritionalPlanDetailWidget extends StatelessWidget { @@ -46,15 +44,13 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ? _nutritionalPlan.gPerBodyKg(lastWeightEntry.weight, nutritionalValues) : null; - final List listOfIngredientMeal = listOfIngredientsLog(_nutritionalPlan); - return SliverList( delegate: SliverChildListDelegate( [ const SizedBox(height: 10), - - ..._nutritionalPlan.meals.map((meal) => MealWidget(meal, listOfIngredientMeal)).toList(), - + ..._nutritionalPlan.meals + .map((meal) => MealWidget(meal, _nutritionalPlan.allMealItems)) + .toList(), Padding( padding: const EdgeInsets.all(8.0), child: ElevatedButton( diff --git a/test/nutritional_plan_model_test.dart b/test/nutritional_plan_model_test.dart index 3ff9d69a..b0fdc0b6 100644 --- a/test/nutritional_plan_model_test.dart +++ b/test/nutritional_plan_model_test.dart @@ -17,23 +17,32 @@ */ import 'package:flutter_test/flutter_test.dart'; +import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/models/nutrition/nutritrional_values.dart'; import '../test_data/nutritional_plans.dart'; void main() { + late NutritionalPlan plan; + + setUp(() { + plan = getNutritionalPlan(); + }); + group('model tests', () { test('Test the nutritionalValues method for nutritional plans', () { - final plan = getNutritionalPlan(); final values = NutritionalValues.values(4118.75, 32.75, 347.5, 9.5, 59.0, 37.75, 52.5, 30.5); expect(plan.nutritionalValues, values); }); test('Test the nutritionalValues method for meals', () { - final plan = getNutritionalPlan(); final meal = plan.meals.first; final values = NutritionalValues.values(518.75, 5.75, 17.5, 3.5, 29.0, 13.75, 49.5, 0.5); expect(meal.nutritionalValues, values); }); + + test('Test that the getter returns all meal items for a plan', () { + expect(plan.allMealItems, plan.meals[0].mealItems + plan.meals[1].mealItems); + }); }); }