Skip to content

Commit e9ff3ec

Browse files
authored
Merge pull request #606 from wger-project/simplify-tables
Simplify tables code + small fixes and tweaks
2 parents ecad7bf + 7f96672 commit e9ff3ec

File tree

4 files changed

+82
-251
lines changed

4 files changed

+82
-251
lines changed

lib/widgets/nutrition/macro_nutrients_table.dart

Lines changed: 42 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,36 @@ class MacronutrientsTable extends StatelessWidget {
1717

1818
@override
1919
Widget build(BuildContext context) {
20+
final loc = AppLocalizations.of(context);
21+
22+
Widget columnHeader(bool left, String title) => Padding(
23+
padding: const EdgeInsets.symmetric(vertical: tablePadding),
24+
child: Text(
25+
title,
26+
style: const TextStyle(fontWeight: FontWeight.bold),
27+
textAlign: left ? TextAlign.left : TextAlign.right,
28+
),
29+
);
30+
31+
TableRow macroRow(int indent, bool g, String title, double? Function(NutritionalGoals ng) get) {
32+
final goal = get(nutritionalGoals);
33+
final pct = get(plannedValuesPercentage);
34+
final perkg = nutritionalGoalsGperKg == null ? null : get(nutritionalGoalsGperKg!);
35+
final valFn = g ? loc.gValue : loc.kcalValue;
36+
37+
return TableRow(
38+
children: [
39+
Padding(
40+
padding: EdgeInsets.symmetric(vertical: tablePadding, horizontal: indent * 12),
41+
child: Text(title),
42+
),
43+
Text(goal != null ? valFn(goal.toStringAsFixed(0)) : '', textAlign: TextAlign.right),
44+
Text(pct != null ? pct.toStringAsFixed(1) : '', textAlign: TextAlign.right),
45+
Text(perkg != null ? perkg.toStringAsFixed(1) : '', textAlign: TextAlign.right),
46+
],
47+
);
48+
}
49+
2050
return Table(
2151
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
2252
border: TableBorder(
@@ -29,147 +59,20 @@ class MacronutrientsTable extends StatelessWidget {
2959
children: [
3060
TableRow(
3161
children: [
32-
Padding(
33-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
34-
child: Text(
35-
AppLocalizations.of(context).macronutrients,
36-
style: const TextStyle(fontWeight: FontWeight.bold),
37-
),
38-
),
39-
Text(
40-
AppLocalizations.of(context).total,
41-
style: const TextStyle(fontWeight: FontWeight.bold),
42-
),
43-
Text(
44-
AppLocalizations.of(context).percentEnergy,
45-
style: const TextStyle(fontWeight: FontWeight.bold),
46-
),
47-
Text(
48-
AppLocalizations.of(context).gPerBodyKg,
49-
style: const TextStyle(fontWeight: FontWeight.bold),
50-
),
51-
],
52-
),
53-
TableRow(
54-
children: [
55-
Padding(
56-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
57-
child: Text(AppLocalizations.of(context).energy),
58-
),
59-
Text(
60-
nutritionalGoals.energy != null
61-
? nutritionalGoals.energy!.toStringAsFixed(0) + AppLocalizations.of(context).kcal
62-
: '',
63-
),
64-
const Text(''),
65-
const Text(''),
66-
],
67-
),
68-
TableRow(
69-
children: [
70-
Padding(
71-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
72-
child: Text(AppLocalizations.of(context).protein),
73-
),
74-
Text(nutritionalGoals.protein != null
75-
? nutritionalGoals.protein!.toStringAsFixed(0) + AppLocalizations.of(context).g
76-
: ''),
77-
Text(plannedValuesPercentage.protein != null
78-
? plannedValuesPercentage.protein!.toStringAsFixed(1)
79-
: ''),
80-
Text(nutritionalGoalsGperKg != null && nutritionalGoalsGperKg!.protein != null
81-
? nutritionalGoalsGperKg!.protein!.toStringAsFixed(1)
82-
: ''),
83-
],
84-
),
85-
TableRow(
86-
children: [
87-
Padding(
88-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
89-
child: Text(AppLocalizations.of(context).carbohydrates),
90-
),
91-
Text(nutritionalGoals.carbohydrates != null
92-
? nutritionalGoals.carbohydrates!.toStringAsFixed(0) +
93-
AppLocalizations.of(context).g
94-
: ''),
95-
Text(plannedValuesPercentage.carbohydrates != null
96-
? plannedValuesPercentage.carbohydrates!.toStringAsFixed(1)
97-
: ''),
98-
Text(nutritionalGoalsGperKg != null && nutritionalGoalsGperKg!.carbohydrates != null
99-
? nutritionalGoalsGperKg!.carbohydrates!.toStringAsFixed(1)
100-
: ''),
101-
],
102-
),
103-
TableRow(
104-
children: [
105-
Padding(
106-
padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12),
107-
child: Text(AppLocalizations.of(context).sugars),
108-
),
109-
const Text(''),
110-
const Text(''),
111-
Text(nutritionalGoals.carbohydratesSugar != null
112-
? nutritionalGoals.carbohydratesSugar!.toStringAsFixed(0) +
113-
AppLocalizations.of(context).g
114-
: ''),
115-
],
116-
),
117-
TableRow(
118-
children: [
119-
Padding(
120-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
121-
child: Text(AppLocalizations.of(context).fat),
122-
),
123-
Text(nutritionalGoals.fat != null
124-
? nutritionalGoals.fat!.toStringAsFixed(0) + AppLocalizations.of(context).g
125-
: ''),
126-
Text(plannedValuesPercentage.fat != null
127-
? plannedValuesPercentage.fat!.toStringAsFixed(1)
128-
: ''),
129-
Text(nutritionalGoalsGperKg != null && nutritionalGoalsGperKg!.fat != null
130-
? nutritionalGoalsGperKg!.fat!.toStringAsFixed(1)
131-
: ''),
132-
],
133-
),
134-
TableRow(
135-
children: [
136-
Padding(
137-
padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12),
138-
child: Text(AppLocalizations.of(context).saturatedFat),
139-
),
140-
const Text(''),
141-
const Text(''),
142-
Text(nutritionalGoals.fatSaturated != null
143-
? nutritionalGoals.fatSaturated!.toStringAsFixed(0) + AppLocalizations.of(context).g
144-
: ''),
145-
],
146-
),
147-
TableRow(
148-
children: [
149-
Padding(
150-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
151-
child: Text(AppLocalizations.of(context).fiber),
152-
),
153-
const Text(''),
154-
const Text(''),
155-
Text(nutritionalGoals.fiber != null
156-
? nutritionalGoals.fiber!.toStringAsFixed(0) + AppLocalizations.of(context).g
157-
: ''),
158-
],
159-
),
160-
TableRow(
161-
children: [
162-
Padding(
163-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
164-
child: Text(AppLocalizations.of(context).sodium),
165-
),
166-
const Text(''),
167-
const Text(''),
168-
Text(nutritionalGoals.sodium != null
169-
? nutritionalGoals.sodium!.toStringAsFixed(0) + AppLocalizations.of(context).g
170-
: ''),
62+
columnHeader(true, loc.macronutrients),
63+
columnHeader(false, loc.total),
64+
columnHeader(false, loc.percentEnergy),
65+
columnHeader(false, loc.gPerBodyKg),
17166
],
17267
),
68+
macroRow(0, false, loc.energy, (NutritionalGoals ng) => ng.energy),
69+
macroRow(0, true, loc.protein, (NutritionalGoals ng) => ng.protein),
70+
macroRow(0, true, loc.carbohydrates, (NutritionalGoals ng) => ng.carbohydrates),
71+
macroRow(1, true, loc.sugars, (NutritionalGoals ng) => ng.carbohydratesSugar),
72+
macroRow(0, true, loc.fat, (NutritionalGoals ng) => ng.fat),
73+
macroRow(1, true, loc.saturatedFat, (NutritionalGoals ng) => ng.fatSaturated),
74+
macroRow(0, true, loc.fiber, (NutritionalGoals ng) => ng.fiber),
75+
macroRow(0, true, loc.sodium, (NutritionalGoals ng) => ng.sodium),
17376
],
17477
);
17578
}

lib/widgets/nutrition/nutritional_diary_detail.dart

Lines changed: 40 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -82,125 +82,53 @@ class NutritionDiaryTable extends StatelessWidget {
8282

8383
@override
8484
Widget build(BuildContext context) {
85+
final loc = AppLocalizations.of(context);
86+
87+
Widget columnHeader(bool left, String title) => Padding(
88+
padding: const EdgeInsets.symmetric(vertical: tablePadding),
89+
child: Text(
90+
title,
91+
style: const TextStyle(fontWeight: FontWeight.bold),
92+
textAlign: left ? TextAlign.left : TextAlign.right,
93+
),
94+
);
95+
96+
TableRow macroRow(int indent, bool g, String title, double Function(NutritionalValues nv) get) {
97+
final valFn = g ? loc.gValue : loc.kcalValue;
98+
return TableRow(
99+
children: [
100+
Padding(
101+
padding: EdgeInsets.symmetric(vertical: tablePadding, horizontal: indent * 12),
102+
child: Text(title),
103+
),
104+
Text(valFn(get(planned).toStringAsFixed(0)), textAlign: TextAlign.right),
105+
Text(valFn(get(logged).toStringAsFixed(0)), textAlign: TextAlign.right),
106+
Text((get(logged) - get(planned)).toStringAsFixed(0), textAlign: TextAlign.right),
107+
],
108+
);
109+
}
110+
85111
return Table(
86112
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
87113
border: TableBorder(
88114
horizontalInside: BorderSide(width: 1, color: Theme.of(context).colorScheme.outline),
89115
),
90116
columnWidths: const {0: FractionColumnWidth(0.4)},
91117
children: [
92-
TableRow(
93-
children: [
94-
Padding(
95-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
96-
child: Text(
97-
AppLocalizations.of(context).macronutrients,
98-
style: const TextStyle(fontWeight: FontWeight.bold),
99-
),
100-
),
101-
Text(
102-
AppLocalizations.of(context).planned,
103-
style: const TextStyle(fontWeight: FontWeight.bold),
104-
),
105-
Text(
106-
AppLocalizations.of(context).logged,
107-
style: const TextStyle(fontWeight: FontWeight.bold),
108-
),
109-
Text(
110-
AppLocalizations.of(context).difference,
111-
style: const TextStyle(fontWeight: FontWeight.bold),
112-
),
113-
],
114-
),
115-
TableRow(
116-
children: [
117-
Padding(
118-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
119-
child: Text(AppLocalizations.of(context).energy),
120-
),
121-
Text(AppLocalizations.of(context).kcalValue(planned.energy.toStringAsFixed(0))),
122-
Text(AppLocalizations.of(context).kcalValue(logged.energy.toStringAsFixed(0))),
123-
Text((logged.energy - planned.energy).toStringAsFixed(0)),
124-
],
125-
),
126-
TableRow(
127-
children: [
128-
Padding(
129-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
130-
child: Text(AppLocalizations.of(context).protein),
131-
),
132-
Text(AppLocalizations.of(context).gValue(planned.protein.toStringAsFixed(0))),
133-
Text(AppLocalizations.of(context).gValue(logged.protein.toStringAsFixed(0))),
134-
Text((logged.protein - planned.protein).toStringAsFixed(0)),
135-
],
136-
),
137-
TableRow(
138-
children: [
139-
Padding(
140-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
141-
child: Text(AppLocalizations.of(context).carbohydrates),
142-
),
143-
Text(AppLocalizations.of(context).gValue(planned.carbohydrates.toStringAsFixed(0))),
144-
Text(AppLocalizations.of(context).gValue(logged.carbohydrates.toStringAsFixed(0))),
145-
Text((logged.carbohydrates - planned.carbohydrates).toStringAsFixed(0)),
146-
],
147-
),
148-
TableRow(
149-
children: [
150-
Padding(
151-
padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12),
152-
child: Text(AppLocalizations.of(context).sugars),
153-
),
154-
Text(
155-
AppLocalizations.of(context).gValue(planned.carbohydratesSugar.toStringAsFixed(0))),
156-
Text(AppLocalizations.of(context).gValue(logged.carbohydratesSugar.toStringAsFixed(0))),
157-
Text((logged.carbohydratesSugar - planned.carbohydratesSugar).toStringAsFixed(0)),
158-
],
159-
),
160-
TableRow(
161-
children: [
162-
Padding(
163-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
164-
child: Text(AppLocalizations.of(context).fat),
165-
),
166-
Text(AppLocalizations.of(context).gValue(planned.fat.toStringAsFixed(0))),
167-
Text(AppLocalizations.of(context).gValue(logged.fat.toStringAsFixed(0))),
168-
Text((logged.fat - planned.fat).toStringAsFixed(0)),
169-
],
170-
),
171-
TableRow(
172-
children: [
173-
Padding(
174-
padding: const EdgeInsets.symmetric(vertical: tablePadding, horizontal: 12),
175-
child: Text(AppLocalizations.of(context).saturatedFat),
176-
),
177-
Text(AppLocalizations.of(context).gValue(planned.fatSaturated.toStringAsFixed(0))),
178-
Text(AppLocalizations.of(context).gValue(logged.fatSaturated.toStringAsFixed(0))),
179-
Text((logged.fatSaturated - planned.fatSaturated).toStringAsFixed(0)),
180-
],
181-
),
182-
TableRow(
183-
children: [
184-
Padding(
185-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
186-
child: Text(AppLocalizations.of(context).fiber),
187-
),
188-
Text(AppLocalizations.of(context).gValue(planned.fiber.toStringAsFixed(0))),
189-
Text(AppLocalizations.of(context).gValue(logged.fiber.toStringAsFixed(0))),
190-
Text((logged.fiber - planned.fiber).toStringAsFixed(0)),
191-
],
192-
),
193-
TableRow(
194-
children: [
195-
Padding(
196-
padding: const EdgeInsets.symmetric(vertical: tablePadding),
197-
child: Text(AppLocalizations.of(context).sodium),
198-
),
199-
Text(AppLocalizations.of(context).gValue(planned.sodium.toStringAsFixed(0))),
200-
Text(AppLocalizations.of(context).gValue(logged.sodium.toStringAsFixed(0))),
201-
Text((logged.sodium - planned.sodium).toStringAsFixed(0)),
202-
],
203-
),
118+
TableRow(children: [
119+
columnHeader(true, loc.macronutrients),
120+
columnHeader(false, loc.planned),
121+
columnHeader(false, loc.logged),
122+
columnHeader(false, loc.difference),
123+
]),
124+
macroRow(0, false, loc.energy, (NutritionalValues nv) => nv.energy),
125+
macroRow(0, true, loc.protein, (NutritionalValues nv) => nv.protein),
126+
macroRow(0, true, loc.carbohydrates, (NutritionalValues nv) => nv.carbohydrates),
127+
macroRow(1, true, loc.sugars, (NutritionalValues nv) => nv.carbohydratesSugar),
128+
macroRow(0, true, loc.fat, (NutritionalValues nv) => nv.fat),
129+
macroRow(1, true, loc.saturatedFat, (NutritionalValues nv) => nv.fatSaturated),
130+
macroRow(0, true, loc.fiber, (NutritionalValues nv) => nv.fiber),
131+
macroRow(0, true, loc.sodium, (NutritionalValues nv) => nv.sodium),
204132
],
205133
);
206134
}
-963 Bytes
Loading
146 Bytes
Loading

0 commit comments

Comments
 (0)