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' ;
24
25
import 'package:wger/widgets/nutrition/meal.dart' ;
25
26
import 'package:wger/widgets/nutrition/nutrition_tiles.dart' ;
26
- import 'package:wger/helpers/json.dart' ;
27
27
28
28
class LogMealArguments {
29
29
final Meal meal;
@@ -43,11 +43,22 @@ class LogMealScreen extends StatefulWidget {
43
43
44
44
class _LogMealScreenState extends State <LogMealScreen > {
45
45
double portionPct = 100 ;
46
- final _whatDateController = TextEditingController ();
47
- final _whatTimeController = TextEditingController ();
48
- _LogMealScreenState () {
49
- _whatDateController.text = dateToYYYYMMDD (DateTime .now ())! ;
50
- _whatTimeController.text = timeToString (TimeOfDay .now ())! ;
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 ();
51
62
}
52
63
53
64
@override
@@ -100,27 +111,12 @@ class _LogMealScreenState extends State<LogMealScreen> {
100
111
const Padding (padding: EdgeInsets .symmetric (horizontal: 12 )),
101
112
Expanded (
102
113
child: TextFormField (
103
- textAlign: TextAlign .center,
104
-
114
+ key: const ValueKey ('field-date' ),
105
115
readOnly: true ,
106
-
107
- // Stop keyboard from appearing
108
-
109
- decoration: InputDecoration (
110
- labelText: AppLocalizations .of (context).date,
111
-
112
- floatingLabelAlignment: FloatingLabelAlignment .center,
113
-
114
- // suffixIcon: const Icon(Icons.calendar_today),
115
- ),
116
-
116
+ decoration: InputDecoration (labelText: AppLocalizations .of (context).date),
117
117
enableInteractiveSelection: false ,
118
-
119
- controller: _whatDateController,
120
-
118
+ controller: _dateController,
121
119
onTap: () async {
122
- // Show Date Picker Here
123
-
124
120
final pickedDate = await showDatePicker (
125
121
context: context,
126
122
initialDate: DateTime .now (),
@@ -129,48 +125,37 @@ class _LogMealScreenState extends State<LogMealScreen> {
129
125
);
130
126
131
127
if (pickedDate != null ) {
132
- _whatDateController .text = dateToYYYYMMDD (pickedDate)! ;
128
+ _dateController .text = dateToYYYYMMDD (pickedDate)! ;
133
129
}
134
130
},
135
-
136
131
onSaved: (newValue) {
137
- _whatDateController .text = newValue! ;
132
+ _dateController .text = newValue! ;
138
133
},
139
134
),
140
135
),
141
136
const Padding (padding: EdgeInsets .symmetric (horizontal: 12 )),
142
137
Expanded (
143
- child: TextFormField (
144
- key: const Key ('field-time' ),
145
- textAlign: TextAlign .center,
146
- decoration: InputDecoration (
147
- labelText: AppLocalizations .of (context).time,
148
-
149
- floatingLabelAlignment: FloatingLabelAlignment .center,
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
+ );
150
149
151
- //suffixIcon: const Icon(Icons.punch_clock)
150
+ if (pickedTime != null ) {
151
+ _timeController.text = timeToString (pickedTime)! ;
152
+ }
153
+ },
154
+ onSaved: (newValue) {
155
+ _timeController.text = newValue! ;
156
+ },
152
157
),
153
- controller: _whatTimeController,
154
- onTap: () async {
155
- // Stop keyboard from appearing
156
-
157
- FocusScope .of (context).requestFocus (FocusNode ());
158
-
159
- // Open time picker
160
-
161
- final pickedTime = await showTimePicker (
162
- context: context,
163
- initialTime: TimeOfDay .fromDateTime (DateTime .now ()),
164
- );
165
-
166
- if (pickedTime != null ) {
167
- _whatTimeController.text = timeToString (pickedTime)! ;
168
- }
169
- },
170
- onSaved: (newValue) {
171
- _whatTimeController.text = newValue! ;
172
- },
173
- )),
158
+ ),
174
159
const Padding (padding: EdgeInsets .symmetric (horizontal: 12 )),
175
160
],
176
161
),
@@ -186,9 +171,9 @@ class _LogMealScreenState extends State<LogMealScreen> {
186
171
context,
187
172
listen: false ,
188
173
).logMealToDiary (
189
- meal,
190
- DateTime .parse (
191
- '${ _whatDateController . text } ${ _whatTimeController . text }' ) );
174
+ meal,
175
+ DateTime .parse ('${ _dateController . text } ${ _timeController . text }' ),
176
+ );
192
177
// ignore: use_build_context_synchronously
193
178
ScaffoldMessenger .of (context).showSnackBar (
194
179
SnackBar (
0 commit comments