Skip to content

Commit 0fd2154

Browse files
authored
Merge pull request #815 from Shininess8816/mealDateTime
Allow the logging on meals with date times #789
2 parents 0709232 + a2a3384 commit 0fd2154

File tree

6 files changed

+115
-11
lines changed

6 files changed

+115
-11
lines changed

lib/providers/nutrition.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,10 +398,10 @@ class NutritionPlansProvider with ChangeNotifier {
398398
}
399399

400400
/// Log meal to nutrition diary
401-
Future<void> logMealToDiary(Meal meal) async {
401+
Future<void> logMealToDiary(Meal meal, DateTime mealDateTime) async {
402402
for (final item in meal.mealItems) {
403403
final plan = findById(meal.planId);
404-
final Log log = Log.fromMealItem(item, plan.id!, meal.id);
404+
final Log log = Log.fromMealItem(item, plan.id!, meal.id, mealDateTime);
405405

406406
final data = await baseProvider.post(
407407
log.toJson(),

lib/screens/log_meal_screen.dart

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import 'package:flutter/material.dart';
2020
import 'package:provider/provider.dart';
21+
import 'package:wger/helpers/json.dart';
2122
import 'package:wger/l10n/generated/app_localizations.dart';
2223
import 'package:wger/models/nutrition/meal.dart';
2324
import 'package:wger/providers/nutrition.dart';
@@ -42,6 +43,23 @@ class LogMealScreen extends StatefulWidget {
4243

4344
class _LogMealScreenState extends State<LogMealScreen> {
4445
double portionPct = 100;
46+
final _dateController = TextEditingController();
47+
final _timeController = TextEditingController();
48+
49+
@override
50+
void initState() {
51+
super.initState();
52+
53+
_dateController.text = dateToYYYYMMDD(DateTime.now())!;
54+
_timeController.text = timeToString(TimeOfDay.now())!;
55+
}
56+
57+
@override
58+
void dispose() {
59+
_dateController.dispose();
60+
_timeController.dispose();
61+
super.dispose();
62+
}
4563

4664
@override
4765
Widget build(BuildContext context) {
@@ -87,6 +105,61 @@ class _LogMealScreenState extends State<LogMealScreen> {
87105
),
88106
],
89107
),
108+
Row(
109+
mainAxisAlignment: MainAxisAlignment.spaceAround,
110+
children: [
111+
const Padding(padding: EdgeInsets.symmetric(horizontal: 12)),
112+
Expanded(
113+
child: TextFormField(
114+
key: const ValueKey('field-date'),
115+
readOnly: true,
116+
decoration: InputDecoration(labelText: AppLocalizations.of(context).date),
117+
enableInteractiveSelection: false,
118+
controller: _dateController,
119+
onTap: () async {
120+
final pickedDate = await showDatePicker(
121+
context: context,
122+
initialDate: DateTime.now(),
123+
firstDate: DateTime(DateTime.now().year - 10),
124+
lastDate: DateTime.now(),
125+
);
126+
127+
if (pickedDate != null) {
128+
_dateController.text = dateToYYYYMMDD(pickedDate)!;
129+
}
130+
},
131+
onSaved: (newValue) {
132+
_dateController.text = newValue!;
133+
},
134+
),
135+
),
136+
const Padding(padding: EdgeInsets.symmetric(horizontal: 12)),
137+
Expanded(
138+
child: TextFormField(
139+
key: const ValueKey('field-time'),
140+
readOnly: true,
141+
decoration: InputDecoration(labelText: AppLocalizations.of(context).time),
142+
controller: _timeController,
143+
onTap: () async {
144+
// Open time picker
145+
final pickedTime = await showTimePicker(
146+
context: context,
147+
initialTime: TimeOfDay.fromDateTime(DateTime.now()),
148+
);
149+
150+
if (pickedTime != null) {
151+
_timeController.text = timeToString(pickedTime)!;
152+
}
153+
},
154+
onSaved: (newValue) {
155+
_timeController.text = newValue!;
156+
},
157+
),
158+
),
159+
const Padding(padding: EdgeInsets.symmetric(horizontal: 12)),
160+
],
161+
),
162+
const Padding(padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8)),
90163
Row(
91164
mainAxisAlignment: MainAxisAlignment.end,
92165
children: [
@@ -97,7 +170,10 @@ class _LogMealScreenState extends State<LogMealScreen> {
97170
await Provider.of<NutritionPlansProvider>(
98171
context,
99172
listen: false,
100-
).logMealToDiary(meal);
173+
).logMealToDiary(
174+
meal,
175+
DateTime.parse('${_dateController.text} ${_timeController.text}'),
176+
);
101177
// ignore: use_build_context_synchronously
102178
ScaffoldMessenger.of(context).showSnackBar(
103179
SnackBar(

test/core/settings_test.mocks.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,10 +1007,17 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i20.NutritionPlans
10071007
) as _i18.Future<_i13.Ingredient?>);
10081008

10091009
@override
1010-
_i18.Future<void> logMealToDiary(_i11.Meal? meal) => (super.noSuchMethod(
1010+
_i18.Future<void> logMealToDiary(
1011+
_i11.Meal? meal,
1012+
DateTime? mealDateTime,
1013+
) =>
1014+
(super.noSuchMethod(
10111015
Invocation.method(
10121016
#logMealToDiary,
1013-
[meal],
1017+
[
1018+
meal,
1019+
mealDateTime,
1020+
],
10141021
),
10151022
returnValue: _i18.Future<void>.value(),
10161023
returnValueForMissingStub: _i18.Future<void>.value(),

test/nutrition/nutritional_meal_form_test.mocks.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,10 +422,17 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP
422422
) as _i9.Future<_i7.Ingredient?>);
423423

424424
@override
425-
_i9.Future<void> logMealToDiary(_i5.Meal? meal) => (super.noSuchMethod(
425+
_i9.Future<void> logMealToDiary(
426+
_i5.Meal? meal,
427+
DateTime? mealDateTime,
428+
) =>
429+
(super.noSuchMethod(
426430
Invocation.method(
427431
#logMealToDiary,
428-
[meal],
432+
[
433+
meal,
434+
mealDateTime,
435+
],
429436
),
430437
returnValue: _i9.Future<void>.value(),
431438
returnValueForMissingStub: _i9.Future<void>.value(),

test/nutrition/nutritional_plan_form_test.mocks.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,10 +422,17 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i8.NutritionPlansP
422422
) as _i9.Future<_i7.Ingredient?>);
423423

424424
@override
425-
_i9.Future<void> logMealToDiary(_i5.Meal? meal) => (super.noSuchMethod(
425+
_i9.Future<void> logMealToDiary(
426+
_i5.Meal? meal,
427+
DateTime? mealDateTime,
428+
) =>
429+
(super.noSuchMethod(
426430
Invocation.method(
427431
#logMealToDiary,
428-
[meal],
432+
[
433+
meal,
434+
mealDateTime,
435+
],
429436
),
430437
returnValue: _i9.Future<void>.value(),
431438
returnValueForMissingStub: _i9.Future<void>.value(),

test/weight/weight_screen_test.mocks.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -747,10 +747,17 @@ class MockNutritionPlansProvider extends _i1.Mock implements _i16.NutritionPlans
747747
) as _i11.Future<_i9.Ingredient?>);
748748

749749
@override
750-
_i11.Future<void> logMealToDiary(_i7.Meal? meal) => (super.noSuchMethod(
750+
_i11.Future<void> logMealToDiary(
751+
_i7.Meal? meal,
752+
DateTime? mealDateTime,
753+
) =>
754+
(super.noSuchMethod(
751755
Invocation.method(
752756
#logMealToDiary,
753-
[meal],
757+
[
758+
meal,
759+
mealDateTime,
760+
],
754761
),
755762
returnValue: _i11.Future<void>.value(),
756763
returnValueForMissingStub: _i11.Future<void>.value(),

0 commit comments

Comments
 (0)