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); }); }