mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-19 07:50:52 +01:00
Consistenly display nutritional values
Additional: Removed macronutrients sugars and saturated fats
This commit is contained in:
@@ -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);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
||||
@@ -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()
|
||||
: '';
|
||||
|
||||
@@ -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)),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user