diff --git a/assets/icons/ingredient-add.svg b/assets/icons/ingredient-add.svg
new file mode 100644
index 00000000..5a1e962c
--- /dev/null
+++ b/assets/icons/ingredient-add.svg
@@ -0,0 +1,72 @@
+
+
+
+
+
+
diff --git a/assets/icons/ingredient-check.svg b/assets/icons/ingredient-check.svg
new file mode 100644
index 00000000..e66e14f5
--- /dev/null
+++ b/assets/icons/ingredient-check.svg
@@ -0,0 +1,65 @@
+
+
+
+
+
+
diff --git a/assets/icons/ingredient-diary.svg b/assets/icons/ingredient-diary.svg
new file mode 100644
index 00000000..f99aa57f
--- /dev/null
+++ b/assets/icons/ingredient-diary.svg
@@ -0,0 +1,86 @@
+
+
+
+
+
+
diff --git a/assets/icons/ingredient-edit.svg b/assets/icons/ingredient-edit.svg
new file mode 100644
index 00000000..28634547
--- /dev/null
+++ b/assets/icons/ingredient-edit.svg
@@ -0,0 +1,68 @@
+
+
+
+
+
+
diff --git a/assets/icons/meal-add.svg b/assets/icons/meal-add.svg
new file mode 100644
index 00000000..b4539154
--- /dev/null
+++ b/assets/icons/meal-add.svg
@@ -0,0 +1,68 @@
+
+
+
+
+
+
diff --git a/assets/icons/meal-check.svg b/assets/icons/meal-check.svg
new file mode 100644
index 00000000..a0975410
--- /dev/null
+++ b/assets/icons/meal-check.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
diff --git a/assets/icons/meal-diary.svg b/assets/icons/meal-diary.svg
new file mode 100644
index 00000000..c639e1d1
--- /dev/null
+++ b/assets/icons/meal-diary.svg
@@ -0,0 +1,82 @@
+
+
+
+
+
+
diff --git a/assets/icons/meal-edit.svg b/assets/icons/meal-edit.svg
new file mode 100644
index 00000000..51899ad9
--- /dev/null
+++ b/assets/icons/meal-edit.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
diff --git a/assets/images/backgrounds/nutritional_plans.jpg b/assets/images/backgrounds/nutritional_plans.jpg
deleted file mode 100644
index b7066d06..00000000
Binary files a/assets/images/backgrounds/nutritional_plans.jpg and /dev/null differ
diff --git a/assets/images/backgrounds/nutritional_plans.txt.txt b/assets/images/backgrounds/nutritional_plans.txt.txt
deleted file mode 100644
index 63971919..00000000
--- a/assets/images/backgrounds/nutritional_plans.txt.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-https://thenounproject.com/photo/tomatoes-chilies-and-dill-leaves-on-table-0JoGn5/
-
-Tomatoes, chilies and dill leaves on table by Jacob Lund from Noun Project
\ No newline at end of file
diff --git a/assets/images/backgrounds/workout_plans.jpg b/assets/images/backgrounds/workout_plans.jpg
deleted file mode 100644
index d37417fd..00000000
Binary files a/assets/images/backgrounds/workout_plans.jpg and /dev/null differ
diff --git a/assets/images/backgrounds/workout_plans.txt.txt b/assets/images/backgrounds/workout_plans.txt.txt
deleted file mode 100644
index 1bd69171..00000000
--- a/assets/images/backgrounds/workout_plans.txt.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-https://thenounproject.com/photo/athlete-working-out-with-battle-ropes-outdoors-on-grass-field-0LrJR4/
-
-Athlete working out with battle ropes outdoors on grass field by Jacob Lund from Noun Project
\ No newline at end of file
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index 5568c604..6e3e9cb2 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -256,11 +256,12 @@
"@addMeal": {},
"mealLogged": "Meal logged to diary",
"@mealLogged": {},
- "logMeal": "Log this meal",
+ "ingredientLogged": "Ingredient logged to diary",
+ "logMeal": "Log meal to nutrition diary",
"@logMeal": {},
"addIngredient": "Add ingredient",
"@addIngredient": {},
- "logIngredient": "Save to nutrition diary",
+ "logIngredient": "Log ingredient to nutrition diary",
"@logIngredient": {},
"searchIngredient": "Search ingredient",
"@searchIngredient": {
@@ -282,6 +283,7 @@
"@goalMacro": {
"description": "The goal for macronutrients"
},
+ "selectMealToLog": "Select a meal to log to diary",
"goalEnergy": "Energy goal",
"goalProtein": "Protein goal",
"goalCarbohydrates": "Carbohydrates goal",
diff --git a/lib/main.dart b/lib/main.dart
index c035e5e5..6b2785e8 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -39,6 +39,7 @@ import 'package:wger/screens/gallery_screen.dart';
import 'package:wger/screens/gym_mode.dart';
import 'package:wger/screens/home_tabs_screen.dart';
import 'package:wger/screens/log_meal_screen.dart';
+import 'package:wger/screens/log_meals_screen.dart';
import 'package:wger/screens/measurement_categories_screen.dart';
import 'package:wger/screens/measurement_entries_screen.dart';
import 'package:wger/screens/nutritional_diary_screen.dart';
@@ -159,6 +160,7 @@ class MyApp extends StatelessWidget {
NutritionalPlansScreen.routeName: (ctx) => NutritionalPlansScreen(),
NutritionalDiaryScreen.routeName: (ctx) => NutritionalDiaryScreen(),
NutritionalPlanScreen.routeName: (ctx) => NutritionalPlanScreen(),
+ LogMealsScreen.routeName: (ctx) => LogMealsScreen(),
LogMealScreen.routeName: (ctx) => LogMealScreen(),
WeightScreen.routeName: (ctx) => WeightScreen(),
WorkoutPlanScreen.routeName: (ctx) => WorkoutPlanScreen(),
diff --git a/lib/screens/log_meal_screen.dart b/lib/screens/log_meal_screen.dart
index 158ae8ed..cfae7e50 100644
--- a/lib/screens/log_meal_screen.dart
+++ b/lib/screens/log_meal_screen.dart
@@ -26,8 +26,9 @@ import 'package:wger/widgets/nutrition/widgets.dart';
class LogMealArguments {
final Meal meal;
+ final bool popTwice;
- LogMealArguments(this.meal);
+ LogMealArguments(this.meal, this.popTwice);
}
class LogMealScreen extends StatefulWidget {
@@ -104,6 +105,9 @@ class _LogMealScreenState extends State {
),
);
Navigator.of(context).pop();
+ if (args.popTwice) {
+ Navigator.of(context).pop();
+ }
},
),
TextButton(
diff --git a/lib/screens/log_meals_screen.dart b/lib/screens/log_meals_screen.dart
new file mode 100644
index 00000000..71a61f27
--- /dev/null
+++ b/lib/screens/log_meals_screen.dart
@@ -0,0 +1,52 @@
+/*
+ * This file is part of wger Workout Manager .
+ * Copyright (C) 2020, 2021 wger Team
+ *
+ * wger Workout Manager is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * wger Workout Manager is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:wger/models/nutrition/nutritional_plan.dart';
+import 'package:wger/widgets/nutrition/meal.dart';
+
+class LogMealsScreen extends StatefulWidget {
+ static const routeName = '/log-meals';
+
+ @override
+ State createState() => _LogMealsScreenState();
+}
+
+class _LogMealsScreenState extends State {
+ double portionPct = 100;
+
+ @override
+ Widget build(BuildContext context) {
+ final nutritionalPlan = ModalRoute.of(context)!.settings.arguments as NutritionalPlan;
+
+ return Scaffold(
+ appBar: AppBar(
+ title: Text(AppLocalizations.of(context).selectMealToLog),
+ ),
+ body: ListView.builder(
+ itemCount: nutritionalPlan.meals.length,
+ itemBuilder: (context, index) => MealWidget(
+ nutritionalPlan.meals[index],
+ nutritionalPlan.dedupMealItems,
+ true,
+ true,
+ )),
+ );
+ }
+}
diff --git a/lib/screens/nutritional_plan_screen.dart b/lib/screens/nutritional_plan_screen.dart
index 636e4594..e550cc30 100644
--- a/lib/screens/nutritional_plan_screen.dart
+++ b/lib/screens/nutritional_plan_screen.dart
@@ -18,17 +18,18 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_svg_icons/flutter_svg_icons.dart';
import 'package:provider/provider.dart';
import 'package:wger/models/nutrition/nutritional_plan.dart';
import 'package:wger/providers/nutrition.dart';
import 'package:wger/screens/form_screen.dart';
+import 'package:wger/screens/log_meals_screen.dart';
import 'package:wger/widgets/nutrition/forms.dart';
import 'package:wger/widgets/nutrition/nutritional_plan_detail.dart';
enum NutritionalPlanOptions {
edit,
delete,
- toggleMode,
}
class NutritionalPlanScreen extends StatelessWidget {
@@ -45,35 +46,70 @@ class NutritionalPlanScreen extends StatelessWidget {
return Scaffold(
//appBar: getAppBar(nutritionalPlan),
- floatingActionButton: FloatingActionButton(
- child: const Icon(
- Icons.history_edu,
- color: Colors.white,
- ),
- onPressed: () {
- Navigator.pushNamed(
- context,
- FormScreen.routeName,
- arguments: FormScreenArguments(
- AppLocalizations.of(context).logIngredient,
- IngredientLogForm(nutritionalPlan),
- hasListView: true,
+ floatingActionButton: Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ FloatingActionButton(
+ heroTag: null,
+ tooltip: AppLocalizations.of(context).logIngredient,
+ onPressed: () {
+ Navigator.pushNamed(
+ context,
+ FormScreen.routeName,
+ arguments: FormScreenArguments(
+ AppLocalizations.of(context).logIngredient,
+ IngredientLogForm(nutritionalPlan),
+ hasListView: true,
+ ),
+ );
+ },
+ child: const SvgIcon(
+ icon: SvgIconData('assets/icons/ingredient-diary.svg'),
+ color: Colors.white,
),
- );
- },
+ ),
+ const SizedBox(
+ width: 8,
+ ),
+ FloatingActionButton(
+ heroTag: null,
+ tooltip: AppLocalizations.of(context).logMeal,
+ onPressed: () {
+ Navigator.of(context).pushNamed(LogMealsScreen.routeName, arguments: nutritionalPlan);
+ },
+ child: const SvgIcon(
+ icon: SvgIconData('assets/icons/meal-diary.svg'),
+ color: Colors.white,
+ ),
+ ),
+ ],
),
body: CustomScrollView(
slivers: [
SliverAppBar(
foregroundColor: appBarForeground,
- expandedHeight: 250,
pinned: true,
iconTheme: const IconThemeData(color: appBarForeground),
actions: [
+ if (!nutritionalPlan.onlyLogging)
+ IconButton(
+ icon: const SvgIcon(
+ icon: SvgIconData('assets/icons/meal-add.svg'),
+ ),
+ onPressed: () {
+ Navigator.pushNamed(
+ context,
+ FormScreen.routeName,
+ arguments: FormScreenArguments(
+ AppLocalizations.of(context).addMeal,
+ MealForm(nutritionalPlan.id!),
+ ),
+ );
+ },
+ ),
PopupMenuButton(
icon: const Icon(Icons.more_vert, color: appBarForeground),
onSelected: (value) {
- // Edit
if (value == NutritionalPlanOptions.edit) {
Navigator.pushNamed(
context,
@@ -84,8 +120,6 @@ class NutritionalPlanScreen extends StatelessWidget {
hasListView: true,
),
);
-
- // Delete
} else if (value == NutritionalPlanOptions.delete) {
Provider.of(context, listen: false)
.deletePlan(nutritionalPlan.id!);
@@ -96,12 +130,16 @@ class NutritionalPlanScreen extends StatelessWidget {
return [
PopupMenuItem(
value: NutritionalPlanOptions.edit,
- child: Text(AppLocalizations.of(context).edit),
+ child: ListTile(
+ leading: const Icon(Icons.edit),
+ title: Text(AppLocalizations.of(context).edit)),
),
const PopupMenuDivider(),
PopupMenuItem(
value: NutritionalPlanOptions.delete,
- child: Text(AppLocalizations.of(context).delete),
+ child: ListTile(
+ leading: const Icon(Icons.delete),
+ title: Text(AppLocalizations.of(context).delete)),
),
];
},
@@ -113,10 +151,6 @@ class NutritionalPlanScreen extends StatelessWidget {
nutritionalPlan.getLabel(context),
style: Theme.of(context).textTheme.titleLarge?.copyWith(color: appBarForeground),
),
- background: const Image(
- image: AssetImage('assets/images/backgrounds/nutritional_plans.jpg'),
- fit: BoxFit.cover,
- ),
),
),
FutureBuilder(
diff --git a/lib/screens/workout_plan_screen.dart b/lib/screens/workout_plan_screen.dart
index b0e175f1..6b559b2d 100644
--- a/lib/screens/workout_plan_screen.dart
+++ b/lib/screens/workout_plan_screen.dart
@@ -77,7 +77,6 @@ class _WorkoutPlanScreenState extends State {
body: CustomScrollView(
slivers: [
SliverAppBar(
- expandedHeight: 250,
pinned: true,
iconTheme: const IconThemeData(color: appBarForeground),
backgroundColor: wgerPrimaryColor,
@@ -87,10 +86,6 @@ class _WorkoutPlanScreenState extends State {
workoutPlan.name,
style: Theme.of(context).textTheme.titleLarge?.copyWith(color: appBarForeground),
),
- background: const Image(
- image: AssetImage('assets/images/backgrounds/workout_plans.jpg'),
- fit: BoxFit.cover,
- ),
),
actions: [
PopupMenuButton(
diff --git a/lib/widgets/dashboard/widgets.dart b/lib/widgets/dashboard/widgets.dart
index 1f9d4bd8..083f77a6 100644
--- a/lib/widgets/dashboard/widgets.dart
+++ b/lib/widgets/dashboard/widgets.dart
@@ -19,6 +19,7 @@
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_svg_icons/flutter_svg_icons.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
@@ -31,6 +32,8 @@ import 'package:wger/providers/user.dart';
import 'package:wger/providers/workout_plans.dart';
import 'package:wger/screens/form_screen.dart';
import 'package:wger/screens/gym_mode.dart';
+import 'package:wger/screens/log_meal_screen.dart';
+import 'package:wger/screens/log_meals_screen.dart';
import 'package:wger/screens/measurement_categories_screen.dart';
import 'package:wger/screens/nutritional_plan_screen.dart';
import 'package:wger/screens/weight_screen.dart';
@@ -86,20 +89,17 @@ class _DashboardNutritionWidgetState extends State {
),
MutedText(getShortNutritionValues(meal.plannedNutritionalValues, context)),
IconButton(
- icon: const Icon(Icons.history_edu),
+ icon: const SvgIcon(
+ icon: SvgIconData('assets/icons/meal-diary.svg'),
+ ),
color: wgerPrimaryButtonColor,
onPressed: () {
- Provider.of(context, listen: false).logMealToDiary(meal);
- ScaffoldMessenger.of(context).showSnackBar(
- SnackBar(
- content: Text(
- AppLocalizations.of(context).mealLogged,
- textAlign: TextAlign.center,
- ),
- ),
+ Navigator.of(context).pushNamed(
+ LogMealScreen.routeName,
+ arguments: LogMealArguments(meal, false),
);
},
- ),
+ )
],
),
);
@@ -195,7 +195,7 @@ class _DashboardNutritionWidgetState extends State {
),
if (_hasContent)
Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
child: Text(AppLocalizations.of(context).goToDetailPage),
@@ -204,10 +204,9 @@ class _DashboardNutritionWidgetState extends State {
.pushNamed(NutritionalPlanScreen.routeName, arguments: _plan);
},
),
+ Expanded(child: Container()),
IconButton(
- icon: const Icon(
- Icons.history_edu,
- ),
+ icon: const SvgIcon(icon: SvgIconData('assets/icons/ingredient-diary.svg')),
tooltip: AppLocalizations.of(context).logIngredient,
onPressed: () {
Navigator.pushNamed(
@@ -221,6 +220,13 @@ class _DashboardNutritionWidgetState extends State {
);
},
),
+ IconButton(
+ icon: const SvgIcon(icon: SvgIconData('assets/icons/meal-diary.svg')),
+ tooltip: AppLocalizations.of(context).logMeal,
+ onPressed: () {
+ Navigator.of(context).pushNamed(LogMealsScreen.routeName, arguments: _plan);
+ },
+ ),
],
),
],
diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart
index 624e1a36..4bafbe2d 100644
--- a/lib/widgets/nutrition/forms.dart
+++ b/lib/widgets/nutrition/forms.dart
@@ -135,6 +135,14 @@ Widget IngredientLogForm(NutritionalPlan plan) {
onSave: (BuildContext context, MealItem mealItem, DateTime? dt) {
Provider.of(context, listen: false)
.logIngredientToDiary(mealItem, plan.id!, dt);
+ ScaffoldMessenger.of(context).showSnackBar(
+ SnackBar(
+ content: Text(
+ AppLocalizations.of(context).ingredientLogged,
+ textAlign: TextAlign.center,
+ ),
+ ),
+ );
},
withDate: true);
}
diff --git a/lib/widgets/nutrition/meal.dart b/lib/widgets/nutrition/meal.dart
index e11b6e7c..1e7abb3d 100644
--- a/lib/widgets/nutrition/meal.dart
+++ b/lib/widgets/nutrition/meal.dart
@@ -18,6 +18,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_svg_icons/flutter_svg_icons.dart';
import 'package:provider/provider.dart';
import 'package:wger/helpers/consts.dart';
import 'package:wger/models/nutrition/log.dart';
@@ -40,10 +41,14 @@ enum viewMode {
class MealWidget extends StatefulWidget {
final Meal _meal;
final List _recentMealItems;
+ final bool popTwice;
+ final bool readOnly;
const MealWidget(
this._meal,
this._recentMealItems,
+ this.popTwice,
+ this.readOnly,
);
@override
@@ -89,6 +94,8 @@ class _MealWidgetState extends State {
MealHeader(
editing: _editing,
toggleEditing: _toggleEditing,
+ popTwice: widget.popTwice,
+ readOnly: widget.readOnly,
viewMode: _viewMode,
toggleViewMode: _toggleDetails,
meal: widget._meal,
@@ -278,6 +285,8 @@ class LogDiaryItemWidget extends StatelessWidget {
class MealHeader extends StatelessWidget {
final Meal _meal;
final bool _editing;
+ final bool popTwice;
+ final bool readOnly;
final viewMode _viewMode;
final Function _toggleEditing;
final Function _toggleViewMode;
@@ -285,6 +294,8 @@ class MealHeader extends StatelessWidget {
const MealHeader({
required Meal meal,
required bool editing,
+ this.popTwice = false,
+ this.readOnly = false,
required viewMode viewMode,
required Function toggleEditing,
required Function toggleViewMode,
@@ -303,36 +314,20 @@ class MealHeader extends StatelessWidget {
contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
title: Row(children: [
Expanded(
- child: (_meal.name != '')
- ? Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- _meal.name,
- style: Theme.of(context).textTheme.titleMedium,
- ),
- if (_meal.time != null)
- Text(
- _meal.time!.format(context),
- style: Theme.of(context).textTheme.headlineSmall,
- )
- ],
- )
- : Text(
- _meal.time != null ? _meal.time!.format(context) : '',
- style: Theme.of(context).textTheme.headlineSmall,
- ),
- ),
- if (_meal.isRealMeal)
- Text(
- AppLocalizations.of(context).log,
- style: Theme.of(context)
- .textTheme
- .labelLarge
- ?.copyWith(color: Theme.of(context).colorScheme.primary),
- ),
- const SizedBox(width: 26),
- const SizedBox(height: 40, width: 1, child: VerticalDivider()),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ ((_meal.time != null) ? '${_meal.time!.format(context)} ' : '') + _meal.name,
+ style: Theme.of(context).textTheme.titleMedium,
+ ),
+ if (_meal.isRealMeal)
+ Text(
+ getShortNutritionValues(_meal.plannedNutritionalValues, context),
+ style: Theme.of(context).textTheme.titleSmall,
+ ),
+ ],
+ )),
]),
trailing: Row(
mainAxisSize: MainAxisSize.min,
@@ -348,8 +343,8 @@ class MealHeader extends StatelessWidget {
},
tooltip: AppLocalizations.of(context).toggleDetails,
),
- const SizedBox(width: 5),
- if (_meal.isRealMeal)
+ if (_meal.isRealMeal && !readOnly) const SizedBox(width: 5),
+ if (_meal.isRealMeal && !readOnly)
IconButton(
icon: _editing ? const Icon(Icons.done) : const Icon(Icons.edit),
tooltip: _editing
@@ -358,14 +353,16 @@ class MealHeader extends StatelessWidget {
onPressed: () {
_toggleEditing();
},
- )
+ ),
+ if (_meal.isRealMeal) const SizedBox(width: 5),
+ if (_meal.isRealMeal) const SvgIcon(icon: SvgIconData('assets/icons/meal-diary.svg')),
],
),
onTap: _meal.isRealMeal
? () {
Navigator.of(context).pushNamed(
LogMealScreen.routeName,
- arguments: LogMealArguments(_meal),
+ arguments: LogMealArguments(_meal, popTwice),
);
}
: null,
diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart
index cf873904..97036d61 100644
--- a/lib/widgets/nutrition/nutritional_plan_detail.dart
+++ b/lib/widgets/nutrition/nutritional_plan_detail.dart
@@ -21,9 +21,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';
import 'package:wger/models/nutrition/nutritional_plan.dart';
import 'package:wger/providers/body_weight.dart';
-import 'package:wger/screens/form_screen.dart';
import 'package:wger/widgets/nutrition/charts.dart';
-import 'package:wger/widgets/nutrition/forms.dart';
import 'package:wger/widgets/nutrition/macro_nutrients_table.dart';
import 'package:wger/widgets/nutrition/meal.dart';
import 'package:wger/widgets/nutrition/nutritional_diary_table.dart';
@@ -57,28 +55,15 @@ class NutritionalPlanDetailWidget extends StatelessWidget {
..._nutritionalPlan.meals.map((meal) => MealWidget(
meal,
_nutritionalPlan.dedupMealItems,
+ false,
+ false,
)),
MealWidget(
_nutritionalPlan.pseudoMealOthers('Other logs'),
_nutritionalPlan.dedupMealItems,
+ false,
+ true,
),
- if (!_nutritionalPlan.onlyLogging)
- Padding(
- padding: const EdgeInsets.all(8.0),
- child: ElevatedButton(
- child: Text(AppLocalizations.of(context).addMeal),
- onPressed: () {
- Navigator.pushNamed(
- context,
- FormScreen.routeName,
- arguments: FormScreenArguments(
- AppLocalizations.of(context).addMeal,
- MealForm(_nutritionalPlan.id!),
- ),
- );
- },
- ),
- ),
if (nutritionalGoals.isComplete())
Container(
padding: const EdgeInsets.all(15),
diff --git a/pubspec.lock b/pubspec.lock
index ea4d0b5c..3b571027 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -528,6 +528,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.10+1"
+ flutter_svg_icons:
+ dependency: "direct main"
+ description:
+ name: flutter_svg_icons
+ sha256: a8c91c48a0c6e36eb4c7bfd87f493e3be89249c61150c9909fd16f2c2d5daad0
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.1+4"
flutter_test:
dependency: "direct dev"
description: flutter
diff --git a/pubspec.yaml b/pubspec.yaml
index 29c8961c..f283d9ff 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -69,6 +69,8 @@ dependencies:
flex_color_scheme: ^7.3.1
freezed_annotation: ^2.4.1
clock: ^1.1.1
+ flutter_svg_icons: ^0.0.1
+
dev_dependencies:
flutter_test:
@@ -99,10 +101,10 @@ flutter:
assets:
- assets/animations/
- assets/images/
- - assets/images/backgrounds/
- assets/images/muscles/
- assets/images/muscles/main/
- assets/images/muscles/secondary/
+ - assets/icons/
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
diff --git a/test/nutrition/goldens/nutritional_plan_1_default_view.png b/test/nutrition/goldens/nutritional_plan_1_default_view.png
index 84412de4..bfecdd3b 100644
Binary files a/test/nutrition/goldens/nutritional_plan_1_default_view.png and b/test/nutrition/goldens/nutritional_plan_1_default_view.png differ
diff --git a/test/nutrition/goldens/nutritional_plan_2_one_meal_with_ingredients.png b/test/nutrition/goldens/nutritional_plan_2_one_meal_with_ingredients.png
index 1a7b2d21..52ced1bb 100644
Binary files a/test/nutrition/goldens/nutritional_plan_2_one_meal_with_ingredients.png and b/test/nutrition/goldens/nutritional_plan_2_one_meal_with_ingredients.png differ
diff --git a/test/nutrition/goldens/nutritional_plan_3_both_meals_with_ingredients.png b/test/nutrition/goldens/nutritional_plan_3_both_meals_with_ingredients.png
index 454daa74..8a3f3b81 100644
Binary files a/test/nutrition/goldens/nutritional_plan_3_both_meals_with_ingredients.png and b/test/nutrition/goldens/nutritional_plan_3_both_meals_with_ingredients.png differ
diff --git a/test/nutrition/nutritional_plan_screen_test.dart b/test/nutrition/nutritional_plan_screen_test.dart
index 26ab314e..8a884bc0 100644
--- a/test/nutrition/nutritional_plan_screen_test.dart
+++ b/test/nutrition/nutritional_plan_screen_test.dart
@@ -134,7 +134,7 @@ void main() {
await tester.tap(find.byType(TextButton));
await tester.pumpAndSettle();
- expect(find.text('5:00 PM'), findsOneWidget);
+ expect(find.textContaining('5:00 PM'), findsOneWidget);
});
testWidgets('Tests the localization of times - DE', (WidgetTester tester) async {
@@ -142,6 +142,6 @@ void main() {
await tester.tap(find.byType(TextButton));
await tester.pumpAndSettle();
- expect(find.text('17:00'), findsOneWidget);
+ expect(find.textContaining('17:00'), findsOneWidget);
});
}