18
18
19
19
import 'package:flutter/material.dart' ;
20
20
import 'package:provider/provider.dart' ;
21
+ import 'package:wger/helpers/json.dart' ;
21
22
import 'package:wger/l10n/generated/app_localizations.dart' ;
22
23
import 'package:wger/models/nutrition/meal.dart' ;
23
24
import 'package:wger/providers/nutrition.dart' ;
@@ -42,6 +43,23 @@ class LogMealScreen extends StatefulWidget {
42
43
43
44
class _LogMealScreenState extends State <LogMealScreen > {
44
45
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
+ }
45
63
46
64
@override
47
65
Widget build (BuildContext context) {
@@ -87,6 +105,61 @@ class _LogMealScreenState extends State<LogMealScreen> {
87
105
),
88
106
],
89
107
),
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 )),
90
163
Row (
91
164
mainAxisAlignment: MainAxisAlignment .end,
92
165
children: [
@@ -97,7 +170,10 @@ class _LogMealScreenState extends State<LogMealScreen> {
97
170
await Provider .of <NutritionPlansProvider >(
98
171
context,
99
172
listen: false ,
100
- ).logMealToDiary (meal);
173
+ ).logMealToDiary (
174
+ meal,
175
+ DateTime .parse ('${_dateController .text } ${_timeController .text }' ),
176
+ );
101
177
// ignore: use_build_context_synchronously
102
178
ScaffoldMessenger .of (context).showSnackBar (
103
179
SnackBar (
0 commit comments