Consistenly display nutritional values

Additional: Removed macronutrients sugars and saturated fats
This commit is contained in:
Sandi Milohanić
2021-10-07 11:36:19 +02:00
parent a2d74c6e73
commit 7deef06b1d
3 changed files with 89 additions and 49 deletions

View File

@@ -37,12 +37,14 @@ import 'package:wger/widgets/core/charts.dart';
import 'package:wger/widgets/core/core.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/weight/forms.dart';
import 'package:wger/widgets/workouts/forms.dart';
class DashboardNutritionWidget extends StatefulWidget {
@override
_DashboardNutritionWidgetState createState() => _DashboardNutritionWidgetState();
_DashboardNutritionWidgetState createState() =>
_DashboardNutritionWidgetState();
}
class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> {
@@ -53,7 +55,8 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> {
@override
void initState() {
super.initState();
_plan = Provider.of<NutritionPlansProvider>(context, listen: false).currentPlan;
_plan =
Provider.of<NutritionPlansProvider>(context, listen: false).currentPlan;
_hasContent = _plan != null;
}
@@ -80,23 +83,24 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> {
mainAxisSize: MainAxisSize.min,
children: [
MutedText(
'${meal.nutritionalValues.energy.toStringAsFixed(0)}${AppLocalizations.of(context).kcal}'),
'${getFirstWord(AppLocalizations.of(context).energy)} ${meal.nutritionalValues.energy.toStringAsFixed(0)}${AppLocalizations.of(context).kcal}'),
MutedText(' / '),
MutedText(
'${meal.nutritionalValues.protein.toStringAsFixed(0)}${AppLocalizations.of(context).g}'),
'${getFirstWord(AppLocalizations.of(context).protein)} ${meal.nutritionalValues.protein.toStringAsFixed(0)}${AppLocalizations.of(context).g}'),
MutedText(' / '),
MutedText(
'${meal.nutritionalValues.carbohydrates.toStringAsFixed(0)}${AppLocalizations.of(context).g}'),
'${getFirstWord(AppLocalizations.of(context).carbohydrates)} ${meal.nutritionalValues.carbohydrates.toStringAsFixed(0)}${AppLocalizations.of(context).g}'),
MutedText(' / '),
MutedText(
'${meal.nutritionalValues.fat.toStringAsFixed(0)}${AppLocalizations.of(context).g} '),
'${getFirstWord(AppLocalizations.of(context).fat)} ${meal.nutritionalValues.fat.toStringAsFixed(0)}${AppLocalizations.of(context).g} '),
],
),
IconButton(
icon: Icon(Icons.history_edu),
color: wgerPrimaryButtonColor,
onPressed: () {
Provider.of<NutritionPlansProvider>(context, listen: false).logMealToDiary(meal);
Provider.of<NutritionPlansProvider>(context, listen: false)
.logMealToDiary(meal);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
@@ -127,7 +131,8 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> {
),
),
SizedBox(width: 5),
Text('${item.amount.toStringAsFixed(0)} ${AppLocalizations.of(context).g}'),
Text(
'${item.amount.toStringAsFixed(0)} ${AppLocalizations.of(context).g}'),
],
),
],
@@ -157,7 +162,9 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> {
children: [
ListTile(
title: Text(
_hasContent ? _plan!.description : AppLocalizations.of(context).nutritionalPlan,
_hasContent
? _plan!.description
: AppLocalizations.of(context).nutritionalPlan,
style: Theme.of(context).textTheme.headline4,
),
subtitle: Text(
@@ -186,7 +193,8 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> {
Container(
padding: EdgeInsets.all(15),
height: 180,
child: NutritionalPlanPieChartWidget(_plan!.nutritionalValues),
child:
NutritionalPlanPieChartWidget(_plan!.nutritionalValues),
)
],
),
@@ -204,8 +212,9 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> {
TextButton(
child: Text(AppLocalizations.of(context).goToDetailPage),
onPressed: () {
Navigator.of(context)
.pushNamed(NutritionalPlanScreen.routeName, arguments: _plan);
Navigator.of(context).pushNamed(
NutritionalPlanScreen.routeName,
arguments: _plan);
}),
],
),
@@ -270,9 +279,11 @@ class _DashboardWeightWidgetState extends State<DashboardWeightWidget> {
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
TextButton(
child: Text(AppLocalizations.of(context).goToDetailPage),
child: Text(
AppLocalizations.of(context).goToDetailPage),
onPressed: () {
Navigator.of(context).pushNamed(WeightScreen.routeName);
Navigator.of(context)
.pushNamed(WeightScreen.routeName);
}),
],
),
@@ -345,7 +356,8 @@ class _DashboardWorkoutWidgetState extends State<DashboardWorkoutWidget> {
icon: Icon(Icons.play_arrow),
color: wgerPrimaryButtonColor,
onPressed: () {
Navigator.of(context).pushNamed(GymModeScreen.routeName, arguments: day);
Navigator.of(context)
.pushNamed(GymModeScreen.routeName, arguments: day);
},
),
],
@@ -367,7 +379,8 @@ class _DashboardWorkoutWidgetState extends State<DashboardWorkoutWidget> {
children: [
Text(s.exerciseObj.name),
SizedBox(width: 10),
MutedText(set.getSmartRepr(s.exerciseObj).join('\n')),
MutedText(
set.getSmartRepr(s.exerciseObj).join('\n')),
],
),
SizedBox(height: 10),
@@ -392,7 +405,9 @@ class _DashboardWorkoutWidgetState extends State<DashboardWorkoutWidget> {
children: [
ListTile(
title: Text(
_hasContent ? _workoutPlan!.name : AppLocalizations.of(context).labelWorkoutPlan,
_hasContent
? _workoutPlan!.name
: AppLocalizations.of(context).labelWorkoutPlan,
style: Theme.of(context).textTheme.headline4,
),
subtitle: Text(
@@ -434,8 +449,8 @@ class _DashboardWorkoutWidgetState extends State<DashboardWorkoutWidget> {
TextButton(
child: Text(AppLocalizations.of(context).goToDetailPage),
onPressed: () {
Navigator.of(context)
.pushNamed(WorkoutPlanScreen.routeName, arguments: _workoutPlan);
Navigator.of(context).pushNamed(WorkoutPlanScreen.routeName,
arguments: _workoutPlan);
},
),
],

View File

@@ -21,7 +21,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:wger/models/nutrition/nutritrional_values.dart';
import 'package:wger/widgets/core/core.dart';
List<Widget> getMutedNutritionalValues(NutritionalValues values, BuildContext context) {
List<Widget> getMutedNutritionalValues(
NutritionalValues values, BuildContext context) {
final List<Widget> out = [
MutedText(
'${AppLocalizations.of(context).energy}: '
@@ -48,3 +49,7 @@ List<Widget> getMutedNutritionalValues(NutritionalValues values, BuildContext co
];
return out;
}
String getFirstWord(String macroNutrientName) => macroNutrientName.isNotEmpty
? macroNutrientName.trim().split(' ').map((l) => l[0]).join()
: '';

View File

@@ -28,6 +28,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 {
@@ -38,8 +39,10 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final nutritionalValues = _nutritionalPlan.nutritionalValues;
final valuesPercentage = _nutritionalPlan.energyPercentage(nutritionalValues);
final lastWeightEntry = Provider.of<BodyWeightProvider>(context, listen: false).getLastEntry();
final valuesPercentage =
_nutritionalPlan.energyPercentage(nutritionalValues);
final lastWeightEntry =
Provider.of<BodyWeightProvider>(context, listen: false).getLastEntry();
final valuesGperKg = lastWeightEntry != null
? _nutritionalPlan.gPerBodyKg(lastWeightEntry.weight, nutritionalValues)
: null;
@@ -82,7 +85,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding),
padding:
const EdgeInsets.symmetric(vertical: tablePadding),
child: Text(
AppLocalizations.of(context).macronutrients,
style: TextStyle(fontWeight: FontWeight.bold),
@@ -105,7 +109,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding),
padding:
const EdgeInsets.symmetric(vertical: tablePadding),
child: Text(AppLocalizations.of(context).energy),
),
Text(
@@ -119,34 +124,42 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding),
padding:
const EdgeInsets.symmetric(vertical: tablePadding),
child: Text(AppLocalizations.of(context).protein),
),
Text(nutritionalValues.protein.toStringAsFixed(0) +
AppLocalizations.of(context).g),
Text(valuesPercentage.protein.toStringAsFixed(1)),
Text(valuesGperKg != null ? valuesGperKg.protein.toStringAsFixed(1) : ''),
Text(valuesGperKg != null
? valuesGperKg.protein.toStringAsFixed(1)
: ''),
],
),
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding),
padding:
const EdgeInsets.symmetric(vertical: tablePadding),
child: Text(AppLocalizations.of(context).carbohydrates),
),
Text(nutritionalValues.carbohydrates.toStringAsFixed(0) +
AppLocalizations.of(context).g),
Text(valuesPercentage.carbohydrates.toStringAsFixed(1)),
Text(valuesGperKg != null ? valuesGperKg.carbohydrates.toStringAsFixed(1) : ''),
Text(valuesGperKg != null
? valuesGperKg.carbohydrates.toStringAsFixed(1)
: ''),
],
),
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12),
padding: const EdgeInsets.symmetric(
vertical: tablePadding, horizontal: 12),
child: Text(AppLocalizations.of(context).sugars),
),
Text(nutritionalValues.carbohydratesSugar.toStringAsFixed(0) +
Text(nutritionalValues.carbohydratesSugar
.toStringAsFixed(0) +
AppLocalizations.of(context).g),
Text(''),
Text(''),
@@ -155,18 +168,23 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding),
padding:
const EdgeInsets.symmetric(vertical: tablePadding),
child: Text(AppLocalizations.of(context).fat),
),
Text(nutritionalValues.fat.toStringAsFixed(0) + AppLocalizations.of(context).g),
Text(nutritionalValues.fat.toStringAsFixed(0) +
AppLocalizations.of(context).g),
Text(valuesPercentage.fat.toStringAsFixed(1)),
Text(valuesGperKg != null ? valuesGperKg.fat.toStringAsFixed(1) : ''),
Text(valuesGperKg != null
? valuesGperKg.fat.toStringAsFixed(1)
: ''),
],
),
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12),
padding: const EdgeInsets.symmetric(
vertical: tablePadding, horizontal: 12),
child: Text(AppLocalizations.of(context).saturatedFat),
),
Text(nutritionalValues.fatSaturated.toStringAsFixed(0) +
@@ -178,7 +196,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding),
padding:
const EdgeInsets.symmetric(vertical: tablePadding),
child: Text(AppLocalizations.of(context).fibres),
),
Text(nutritionalValues.fibres.toStringAsFixed(0) +
@@ -190,7 +209,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
TableRow(
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: tablePadding),
padding:
const EdgeInsets.symmetric(vertical: tablePadding),
child: Text(AppLocalizations.of(context).sodium),
),
Text(nutritionalValues.sodium.toStringAsFixed(0) +
@@ -211,7 +231,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
Container(
padding: EdgeInsets.all(15),
height: 220,
child: NutritionalDiaryChartWidget(nutritionalPlan: _nutritionalPlan),
child:
NutritionalDiaryChartWidget(nutritionalPlan: _nutritionalPlan),
),
SizedBox(
height: 200,
@@ -225,22 +246,20 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
children: [
TextButton(onPressed: () {}, child: const Text('')),
Text(
'${AppLocalizations.of(context).energy} (${AppLocalizations.of(context).kcal})'),
'${getFirstWord(AppLocalizations.of(context).energy)} (${AppLocalizations.of(context).kcal})',
),
Text(
'${AppLocalizations.of(context).protein} (${AppLocalizations.of(context).g})'),
'${getFirstWord(AppLocalizations.of(context).protein)} (${AppLocalizations.of(context).g})'),
Text(
'${AppLocalizations.of(context).carbohydrates} (${AppLocalizations.of(context).g})'),
'${getFirstWord(AppLocalizations.of(context).carbohydrates)} (${AppLocalizations.of(context).g})'),
Text(
'${AppLocalizations.of(context).sugars} (${AppLocalizations.of(context).g})'),
Text(
'${AppLocalizations.of(context).fat} (${AppLocalizations.of(context).g})'),
Text(
'${AppLocalizations.of(context).saturatedFat} (${AppLocalizations.of(context).g})'),
'${getFirstWord(AppLocalizations.of(context).fat)} (${AppLocalizations.of(context).g})'),
],
),
),
..._nutritionalPlan.logEntriesValues.entries
.map((entry) => NutritionDiaryEntry(entry.key, entry.value, _nutritionalPlan))
.map((entry) => NutritionDiaryEntry(
entry.key, entry.value, _nutritionalPlan))
.toList()
.reversed,
],
@@ -276,14 +295,15 @@ class NutritionDiaryEntry extends StatelessWidget {
arguments: NutritionalDiaryArguments(plan, date),
),
child: Text(
DateFormat.yMd(Localizations.localeOf(context).languageCode).format(date),
DateFormat.yMd(Localizations.localeOf(context).languageCode)
.format(date),
)),
Text(values.energy.toStringAsFixed(0)),
Text(values.protein.toStringAsFixed(0)),
Text(values.carbohydrates.toStringAsFixed(0)),
Text(values.carbohydratesSugar.toStringAsFixed(0)),
//Text(values.carbohydratesSugar.toStringAsFixed(0)),
Text(values.fat.toStringAsFixed(0)),
Text(values.fatSaturated.toStringAsFixed(0)),
//Text(values.fatSaturated.toStringAsFixed(0)),
],
),
);