mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
Merge pull request #834 from wger-project/log-meals-empty
log meal screen: handle "no meals defined" gracefully
This commit is contained in:
@@ -311,6 +311,14 @@
|
||||
"description": "The goal for macronutrients"
|
||||
},
|
||||
"selectMealToLog": "Select a meal to log to diary",
|
||||
"yourCurrentNutritionPlanHasNoMealsDefinedYet": "Your current nutrition plan has no meals defined",
|
||||
"@yourCurrentNutritionPlanHasNoMealsDefinedYet": {
|
||||
"description": "Message shown when a nutrition plan doesn't have any meals"
|
||||
},
|
||||
"toAddMealsToThePlanGoToNutritionalPlanDetails": "To add meals to the plan, go to the nutritional plan details",
|
||||
"@toAddMealsToThePlanGoToNutritionalPlanDetails": {
|
||||
"description": "Message shown to guide users to the nutritional plan details page to add meals"
|
||||
},
|
||||
"goalEnergy": "Energy goal",
|
||||
"goalProtein": "Protein goal",
|
||||
"goalCarbohydrates": "Carbohydrates goal",
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wger/l10n/generated/app_localizations.dart';
|
||||
import 'package:wger/models/nutrition/nutritional_plan.dart';
|
||||
import 'package:wger/screens/nutritional_plan_screen.dart';
|
||||
import 'package:wger/widgets/nutrition/meal.dart';
|
||||
|
||||
class LogMealsScreen extends StatefulWidget {
|
||||
@@ -35,20 +36,63 @@ class _LogMealsScreenState extends State<LogMealsScreen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final nutritionalPlan = ModalRoute.of(context)!.settings.arguments as NutritionalPlan;
|
||||
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,
|
||||
),
|
||||
body: Column(
|
||||
children: [
|
||||
// Meals list or empty state
|
||||
Expanded(
|
||||
child: nutritionalPlan.meals.isEmpty
|
||||
? Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Text(
|
||||
AppLocalizations.of(context)
|
||||
.yourCurrentNutritionPlanHasNoMealsDefinedYet,
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
),
|
||||
)
|
||||
: ListView.builder(
|
||||
itemCount: nutritionalPlan.meals.length,
|
||||
itemBuilder: (context, index) => MealWidget(
|
||||
nutritionalPlan.meals[index],
|
||||
nutritionalPlan.dedupMealItems,
|
||||
true,
|
||||
true,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 8.0, bottom: 32.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
AppLocalizations.of(context).toAddMealsToThePlanGoToNutritionalPlanDetails,
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextButton(
|
||||
child: Text(AppLocalizations.of(context).goToDetailPage),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pushReplacementNamed(
|
||||
NutritionalPlanScreen.routeName,
|
||||
arguments: nutritionalPlan,
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user