Skip to content

Commit f3fe0a6

Browse files
authored
Merge pull request #160 from PDG-NUTRI/151-ajouter-backend-dans-addmeal-et-modification
151 ajouter backend dans addmeal et modification
2 parents 2461d43 + 5522960 commit f3fe0a6

File tree

7 files changed

+201
-101
lines changed

7 files changed

+201
-101
lines changed

lib/api/firebase_meal.dart

+21-21
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,19 @@ class FirebaseMeal extends FirebaseAPI implements IMeal {
1010
FirebaseMeal(FirebaseFirestore db) : super(db, 'meal');
1111

1212
@override
13-
void createMeal(Meal meal) {
14-
collectionReference
15-
.withConverter(
16-
fromFirestore: Meal.fromFirestore,
17-
toFirestore: (Meal meal, options) => meal.toFirestore())
18-
.doc(meal.uid)
19-
.set(meal)
20-
.then((value) => log("Meal Added"))
21-
.catchError((error) {
22-
log("Failed to add meal: $error");
23-
throw Exception(error);
24-
});
13+
Future<void> createMeal(Meal meal) async {
14+
try {
15+
await collectionReference
16+
.withConverter(
17+
fromFirestore: Meal.fromFirestore,
18+
toFirestore: (Meal meal, options) => meal.toFirestore())
19+
.doc(meal.uid)
20+
.set(meal);
21+
log("Meal Added");
22+
} catch (e) {
23+
log("Failed to add meal: $e");
24+
throw Exception(e);
25+
}
2526
}
2627

2728
@override
@@ -41,15 +42,14 @@ class FirebaseMeal extends FirebaseAPI implements IMeal {
4142
}
4243

4344
@override
44-
void updateMeal(Meal meal) {
45-
collectionReference
46-
.doc(meal.uid)
47-
.update(meal.toFirestore())
48-
.then((value) => log("Meal Updated"))
49-
.catchError((error) {
50-
log("Failed to update meal: $error");
51-
throw Exception(error);
52-
});
45+
Future<void> updateMeal(Meal meal) async {
46+
try {
47+
await collectionReference.doc(meal.uid).update(meal.toFirestore());
48+
log("Meal Updated");
49+
} catch (e) {
50+
log("Failed to update meal: $e");
51+
throw Exception(e);
52+
}
5353
}
5454

5555
@override

lib/api/imeal.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import 'package:pdg_app/model/meal.dart';
22

33
abstract class IMeal {
4-
void createMeal(Meal meal);
4+
Future<void> createMeal(Meal meal);
55
Future<Meal> readMeal(String mealId);
6-
void updateMeal(Meal meal);
6+
Future<void> updateMeal(Meal meal);
77
void deleteMeal(String mealId);
88
Future<List<Meal>> getUsersMealForDay(String userId, DateTime day);
99
Future<List<Meal>> getUserMeal(String userId);

lib/provider/meal_provider.dart

+6-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ class MealProvider extends ChangeNotifier {
3838
}
3939

4040
Future<void> addMeal(Meal meal) async {
41-
_mealApi.createMeal(meal);
41+
await _mealApi.createMeal(meal);
42+
notifyListeners();
43+
}
44+
45+
Future<void> updateMeal(Meal meal) async {
46+
await _mealApi.updateMeal(meal);
4247
notifyListeners();
4348
}
4449
}

lib/router/router.gr.dart

+9-5
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ class AppRouter extends _i17.RootStackRouter {
122122
final args = routeData.argsAs<AddMealScreenRouteArgs>();
123123
return _i17.MaterialPageX<_i23.Meal?>(
124124
routeData: routeData,
125-
child: _i13.AddMealScreen(day: args.day, key: args.key));
125+
child: _i13.AddMealScreen(
126+
day: args.day, meal: args.meal, key: args.key));
126127
},
127128
RegisterFirstPageRoute.name: (routeData) {
128129
return _i17.MaterialPageX<dynamic>(
@@ -394,23 +395,26 @@ class DiaryScreenRoute extends _i17.PageRouteInfo<void> {
394395
/// generated route for
395396
/// [_i13.AddMealScreen]
396397
class AddMealScreenRoute extends _i17.PageRouteInfo<AddMealScreenRouteArgs> {
397-
AddMealScreenRoute({required DateTime day, _i18.Key? key})
398+
AddMealScreenRoute({required DateTime day, _i23.Meal? meal, _i18.Key? key})
398399
: super(AddMealScreenRoute.name,
399-
path: 'add', args: AddMealScreenRouteArgs(day: day, key: key));
400+
path: 'add',
401+
args: AddMealScreenRouteArgs(day: day, meal: meal, key: key));
400402

401403
static const String name = 'AddMealScreenRoute';
402404
}
403405

404406
class AddMealScreenRouteArgs {
405-
const AddMealScreenRouteArgs({required this.day, this.key});
407+
const AddMealScreenRouteArgs({required this.day, this.meal, this.key});
406408

407409
final DateTime day;
408410

411+
final _i23.Meal? meal;
412+
409413
final _i18.Key? key;
410414

411415
@override
412416
String toString() {
413-
return 'AddMealScreenRouteArgs{day: $day, key: $key}';
417+
return 'AddMealScreenRouteArgs{day: $day, meal: $meal, key: $key}';
414418
}
415419
}
416420

lib/screens/add_meal.dart

+117-43
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ import '../widgets/slider_with_text.dart';
1515

1616
class AddMealScreen extends StatefulWidget {
1717
final DateTime _day;
18-
const AddMealScreen({required DateTime day, Key? key})
18+
final Meal? _meal;
19+
20+
const AddMealScreen({required DateTime day, Meal? meal, Key? key})
1921
: _day = day,
22+
_meal = meal,
2023
super(key: key);
2124

2225
@override
@@ -30,7 +33,7 @@ enum _TimeButtonEnum {
3033
}
3134

3235
class _AddMealScreenState extends State<AddMealScreen> {
33-
double _hungerBeforeValue = 3;
36+
double _hungerBeforeValue = 5;
3437
double _hungerAfterValue = 3;
3538
final ImagePicker _picker = ImagePicker();
3639
XFile? _image;
@@ -39,6 +42,31 @@ class _AddMealScreenState extends State<AddMealScreen> {
3942
TimeOfDay? _startTime;
4043
TimeOfDay? _endTime;
4144
final TextEditingController _nameTextController = TextEditingController();
45+
final TextEditingController _settingsController = TextEditingController();
46+
final TextEditingController _commentController = TextEditingController();
47+
48+
@override
49+
void initState() {
50+
if (widget._meal != null) {
51+
_nameTextController.text = widget._meal!.title;
52+
53+
if (widget._meal!.setting != null) {
54+
_settingsController.text = widget._meal!.setting!;
55+
}
56+
57+
if (widget._meal!.comment != null) {
58+
_commentController.text = widget._meal!.comment!;
59+
}
60+
61+
_hungerBeforeValue = widget._meal!.hunger.toDouble();
62+
_hungerAfterValue = widget._meal!.satiety.toDouble();
63+
64+
_startTime = TimeOfDay.fromDateTime(widget._meal!.startTime);
65+
_endTime = TimeOfDay.fromDateTime(widget._meal!.endTime);
66+
}
67+
68+
super.initState();
69+
}
4270

4371
Future<XFile?> _takePicture() async {
4472
final XFile? image = await _picker.pickImage(source: ImageSource.camera);
@@ -54,6 +82,8 @@ class _AddMealScreenState extends State<AddMealScreen> {
5482
Widget build(BuildContext context) {
5583
return AddMeal(
5684
nameTextController: _nameTextController,
85+
settingsController: _settingsController,
86+
commentController: _commentController,
5787
hungerBeforeValue: _hungerBeforeValue,
5888
hungerAfterValue: _hungerAfterValue,
5989
onHungerAfterChanged: (value) => setState(() {
@@ -125,12 +155,28 @@ class _AddMealScreenState extends State<AddMealScreen> {
125155
_endTime?.hour ?? 0,
126156
_endTime?.minute ?? 0,
127157
);
158+
if (widget._meal == null) {
159+
AutoRouter.of(context).pop(Meal(
160+
title: _nameTextController.text,
161+
startTime: selectedStartDate,
162+
endTime: selectedEndDate,
163+
hunger: _hungerBeforeValue.toInt(),
164+
satiety: _hungerAfterValue.toInt(),
165+
setting: _settingsController.text,
166+
comment: _commentController.text,
167+
owner: context.read<AuthProvider>().userUid,
168+
));
169+
return;
170+
}
128171
AutoRouter.of(context).pop(Meal(
172+
uid: widget._meal!.uid,
129173
title: _nameTextController.text,
130174
startTime: selectedStartDate,
131175
endTime: selectedEndDate,
132-
hunger: 0,
133-
satiety: 0,
176+
hunger: _hungerBeforeValue.toInt(),
177+
satiety: _hungerAfterValue.toInt(),
178+
setting: _settingsController.text,
179+
comment: _commentController.text,
134180
owner: context.read<AuthProvider>().userUid,
135181
));
136182
},
@@ -155,26 +201,30 @@ class AddMeal extends StatelessWidget {
155201
final String? _endTimeText;
156202
final void Function()? _onValidatePressed;
157203
final TextEditingController? _nameTextController;
204+
final TextEditingController? _settingsController;
205+
final TextEditingController? _commentController;
158206

159-
const AddMeal({
160-
Key? key,
161-
required double hungerBeforeValue,
162-
required double hungerAfterValue,
163-
required void Function(double) onHungerBeforeChanged,
164-
required void Function(double) onHungerAfterChanged,
165-
required void Function() onCameraPressed,
166-
required void Function() onGalleryPressed,
167-
required void Function(TimeOfDay) onTimeSelected,
168-
void Function()? onStartTimeSelected,
169-
void Function()? onEndTimeSelected,
170-
void Function()? onTimeSelectCanceled,
171-
void Function()? onValidatePressed,
172-
bool showTimePicker = false,
173-
String? startTimeText,
174-
String? endTimeText,
175-
XFile? image,
176-
TextEditingController? nameTextController,
177-
}) : _hungerBeforeValue = hungerBeforeValue,
207+
const AddMeal(
208+
{Key? key,
209+
required double hungerBeforeValue,
210+
required double hungerAfterValue,
211+
required void Function(double) onHungerBeforeChanged,
212+
required void Function(double) onHungerAfterChanged,
213+
required void Function() onCameraPressed,
214+
required void Function() onGalleryPressed,
215+
required void Function(TimeOfDay) onTimeSelected,
216+
void Function()? onStartTimeSelected,
217+
void Function()? onEndTimeSelected,
218+
void Function()? onTimeSelectCanceled,
219+
void Function()? onValidatePressed,
220+
bool showTimePicker = false,
221+
String? startTimeText,
222+
String? endTimeText,
223+
XFile? image,
224+
TextEditingController? nameTextController,
225+
TextEditingController? settingsController,
226+
TextEditingController? commentController})
227+
: _hungerBeforeValue = hungerBeforeValue,
178228
_hungerAfterValue = hungerAfterValue,
179229
_onHungerAfterChanged = onHungerAfterChanged,
180230
_onHungerBeforeChanged = onHungerBeforeChanged,
@@ -190,6 +240,8 @@ class AddMeal extends StatelessWidget {
190240
_endTimeText = endTimeText,
191241
_onValidatePressed = onValidatePressed,
192242
_nameTextController = nameTextController,
243+
_settingsController = settingsController,
244+
_commentController = commentController,
193245
super(key: key);
194246

195247
@override
@@ -207,6 +259,8 @@ class AddMeal extends StatelessWidget {
207259
Expanded(
208260
child: _ListView(
209261
nameTextController: _nameTextController,
262+
settingsController: _settingsController,
263+
commentController: _commentController,
210264
hungerAfterValue: _hungerAfterValue,
211265
hungerBeforeValue: _hungerBeforeValue,
212266
onHungerAfterChanged: _onHungerAfterChanged,
@@ -331,19 +385,23 @@ class _ListView extends StatelessWidget {
331385
final String? _startTimeText;
332386
final String? _endTimeText;
333387
final TextEditingController? _nameTextController;
388+
final TextEditingController? _settingsController;
389+
final TextEditingController? _commentController;
334390

335-
const _ListView({
336-
Key? key,
337-
required double hungerBeforeValue,
338-
required double hungerAfterValue,
339-
required void Function(double) onHungerBeforeChanged,
340-
required void Function(double) onHungerAfterChanged,
341-
void Function()? onStartTimePress,
342-
void Function()? onEndTimePress,
343-
String? startTimeText,
344-
String? endTimeText,
345-
TextEditingController? nameTextController,
346-
}) : _hungerBeforeValue = hungerBeforeValue,
391+
const _ListView(
392+
{Key? key,
393+
required double hungerBeforeValue,
394+
required double hungerAfterValue,
395+
required void Function(double) onHungerBeforeChanged,
396+
required void Function(double) onHungerAfterChanged,
397+
void Function()? onStartTimePress,
398+
void Function()? onEndTimePress,
399+
String? startTimeText,
400+
String? endTimeText,
401+
TextEditingController? nameTextController,
402+
TextEditingController? settingsController,
403+
TextEditingController? commentController})
404+
: _hungerBeforeValue = hungerBeforeValue,
347405
_hungerAfterValue = hungerAfterValue,
348406
_onHungerAfterChanged = onHungerAfterChanged,
349407
_onHungerBeforeChanged = onHungerBeforeChanged,
@@ -352,6 +410,8 @@ class _ListView extends StatelessWidget {
352410
_startTimeText = startTimeText,
353411
_endTimeText = endTimeText,
354412
_nameTextController = nameTextController,
413+
_settingsController = settingsController,
414+
_commentController = commentController,
355415
super(key: key);
356416

357417
List<Widget> listViewContent(BuildContext context) => [
@@ -384,22 +444,36 @@ class _ListView extends StatelessWidget {
384444
value: _hungerBeforeValue,
385445
onChanged: _onHungerBeforeChanged,
386446
labels: const [
387-
"encore faim",
388-
"inconfort",
389-
"léger inconfort",
390-
"confort"
447+
"0 - not hungry",
448+
"1",
449+
"2",
450+
"3",
451+
"4",
452+
"5 - really hungry"
391453
]),
392454
SliderWithText(
393455
context: context,
394456
text: "Rate your satiety after eating",
395457
value: _hungerAfterValue,
396458
onChanged: _onHungerAfterChanged,
397459
labels: const [
398-
"encore faim",
399-
"inconfort",
400-
"léger inconfort",
401-
"confort"
460+
"still hungry",
461+
"discomfort",
462+
"mild discomfort",
463+
"comfort"
402464
]),
465+
MainTextField(
466+
name: "Settings",
467+
icon: const Icon(Icons.people_alt, color: Colors.black),
468+
maxLines: null,
469+
controller: _settingsController,
470+
),
471+
MainTextField(
472+
name: "Comments",
473+
icon: const Icon(Icons.comment, color: Colors.black),
474+
maxLines: null,
475+
controller: _commentController,
476+
),
403477
];
404478

405479
@override

0 commit comments

Comments
 (0)