Skip to content

Commit 0bfc09d

Browse files
authored
Merge pull request #124 from PDG-NUTRI/85-mealprovider
85 mealprovider
2 parents 58043c8 + 90dd17d commit 0bfc09d

12 files changed

+217
-95
lines changed

lib/api/firebase_meal.dart

+13-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,19 @@ class FirebaseMeal extends FirebaseAPI implements IMeal {
6767
.where("startTime", isLessThanOrEqualTo: endD)
6868
.withConverter(
6969
fromFirestore: Meal.fromFirestore,
70-
toFirestore: (Meal msg, _) => msg.toFirestore())
70+
toFirestore: (Meal meal, options) => meal.toFirestore())
71+
.get();
72+
List<Meal> meals = m.docs.map((doc) => doc.data()).toList();
73+
return meals;
74+
}
75+
76+
@override
77+
Future<List<Meal>> getUserMeal(String userId) async {
78+
final m = await collectionReference
79+
.where("owner", isEqualTo: userId)
80+
.withConverter(
81+
fromFirestore: Meal.fromFirestore,
82+
toFirestore: (Meal meal, options) => meal.toFirestore())
7183
.get();
7284
List<Meal> meals = m.docs.map((doc) => doc.data()).toList();
7385
return meals;

lib/api/imeal.dart

+1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ abstract class IMeal {
66
void updateMeal(Meal meal);
77
void deleteMeal(String mealId);
88
Future<List<Meal>> getUsersMealForDay(String userId, DateTime day);
9+
Future<List<Meal>> getUserMeal(String userId);
910
}

lib/main.dart

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import 'dart:developer';
2-
31
import 'package:cloud_firestore/cloud_firestore.dart';
42
import 'package:flutter/material.dart';
53
import 'package:firebase_core/firebase_core.dart';
@@ -10,8 +8,9 @@ import 'package:pdg_app/router/chat_guard.dart';
108
import 'package:pdg_app/router/home_guard.dart';
119
import 'package:pdg_app/router/router.gr.dart';
1210
import 'package:pdg_app/theme.dart';
13-
import 'api/firebase_user.dart';
11+
import 'package:provider/provider.dart';
1412
import 'api/firebase_connection.dart';
13+
import 'api/firebase_user.dart';
1514
import 'firebase_options.dart';
1615

1716
Future<void> setup() async {
@@ -30,8 +29,6 @@ void main() async {
3029
await Firebase.initializeApp(
3130
options: DefaultFirebaseOptions.currentPlatform,
3231
);
33-
DateTime a = DateTime(2016, 9, 17, 15, 30);
34-
log(a.toString());
3532
await setup();
3633
runApp(MyApp());
3734
}
@@ -56,7 +53,10 @@ class MyApp extends StatelessWidget {
5653
builder: (context, child) {
5754
if (child == null) return Container();
5855
return SafeArea(
59-
child: child,
56+
child: ChangeNotifierProvider.value(
57+
value: GetIt.I.get<AuthProvider>(),
58+
child: child,
59+
),
6060
);
6161
},
6262
);

lib/model/meal.dart

-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class Meal implements IModel {
3232
DocumentSnapshot<Map<String, dynamic>> snapshot,
3333
SnapshotOptions? options,
3434
) {
35-
3635
final data = snapshot.data();
3736
return Meal(
3837
uid: data?['uid'],

lib/provider/auth_provider.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ class AuthProvider extends ChangeNotifier {
2828
//final isConnected = await _auth.signIn(email: email, password: password);
2929
final isConnected =
3030
await _auth.signIn(email: "[email protected]", password: 'crepes');
31-
notifyListeners();
3231

3332
if (isConnected) {
3433
fetchClient();
3534
}
35+
36+
notifyListeners();
3637
}
3738

3839
Future<void> signOut() async {

lib/provider/meal_provider.dart

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import 'package:cloud_firestore/cloud_firestore.dart';
2+
import 'package:flutter/foundation.dart';
3+
import 'package:pdg_app/api/firebase_meal.dart';
4+
import 'package:pdg_app/api/imeal.dart';
5+
6+
import '../model/meal.dart';
7+
8+
class MealProvider extends ChangeNotifier {
9+
final IMeal _mealApi = FirebaseMeal(FirebaseFirestore.instance);
10+
final String _uid;
11+
bool _isFetching = false;
12+
13+
MealProvider(this._uid) {
14+
fetchMeals();
15+
}
16+
17+
List<Meal> _meals = [];
18+
19+
List<Meal> get meals => _meals;
20+
21+
bool get isFetching => _isFetching;
22+
23+
Future<List<Meal>> fetchMeals() async {
24+
_isFetching = true;
25+
IMeal mealApi = FirebaseMeal(FirebaseFirestore.instance);
26+
_meals = await mealApi.getUserMeal(_uid);
27+
_isFetching = false;
28+
notifyListeners();
29+
return _meals;
30+
}
31+
32+
List<Meal> getMealsByDay(DateTime date) {
33+
return meals.where((element) {
34+
return element.startTime.day == date.day &&
35+
element.startTime.month == date.month &&
36+
element.startTime.year == date.year;
37+
}).toList();
38+
}
39+
40+
Future<void> addMeal(Meal meal) async {
41+
_mealApi.createMeal(meal);
42+
notifyListeners();
43+
}
44+
}

lib/router/home_guard.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ class HomeGuard extends AutoRouteGuard {
55
@override
66
void onNavigation(NavigationResolver resolver, StackRouter router) {
77
// Cette variable sera modifié par la valeur qui indique si c'est un client ou non.
8-
const bool isClient = false;
8+
const bool isClient = true;
99

10+
// ignore: dead_code
1011
if (!isClient) {
1112
resolver.next(true);
1213
// ignore: dead_code
1314
} else {
14-
router.push(const DiaryScreenRoute());
15+
router.push(const DiaryRouterPage());
1516
}
1617
}
1718
}

lib/router/router.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:pdg_app/screens/login.dart';
1111
import 'package:pdg_app/screens/profile.dart';
1212
import 'package:pdg_app/screens/register.dart';
1313

14+
import '../model/meal.dart';
1415
import '../screens/home.dart';
1516
import './auth_gard.dart';
1617
import 'home_guard.dart';
@@ -62,13 +63,14 @@ import 'home_guard.dart';
6263
),
6364
AutoRoute(
6465
page: EmptyRouterPage,
66+
name: 'DiaryRouterPage',
6567
path: 'diary',
6668
children: [
6769
AutoRoute(
6870
path: '',
6971
page: DiaryScreen,
7072
),
71-
AutoRoute(
73+
AutoRoute<Meal?>(
7274
path: 'add',
7375
page: AddMealScreen,
7476
),

lib/router/router.gr.dart

+30-13
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import 'package:auto_route/auto_route.dart' as _i12;
1515
import 'package:auto_route/empty_router_widgets.dart' as _i4;
1616
import 'package:flutter/material.dart' as _i13;
1717

18+
import '../model/meal.dart' as _i17;
1819
import '../screens/add_meal.dart' as _i11;
1920
import '../screens/chat.dart' as _i6;
2021
import '../screens/client_list.dart' as _i9;
@@ -85,7 +86,7 @@ class AppRouter extends _i12.RootStackRouter {
8586
return _i12.MaterialPageX<dynamic>(
8687
routeData: routeData, child: const _i9.ClientListScreen());
8788
},
88-
EmptyRouterPageRoute.name: (routeData) {
89+
DiaryRouterPage.name: (routeData) {
8990
return _i12.MaterialPageX<dynamic>(
9091
routeData: routeData, child: const _i4.EmptyRouterPage());
9192
},
@@ -94,8 +95,10 @@ class AppRouter extends _i12.RootStackRouter {
9495
routeData: routeData, child: const _i10.DiaryScreen());
9596
},
9697
AddMealScreenRoute.name: (routeData) {
97-
return _i12.MaterialPageX<dynamic>(
98-
routeData: routeData, child: const _i11.AddMealScreen());
98+
final args = routeData.argsAs<AddMealScreenRouteArgs>();
99+
return _i12.MaterialPageX<_i17.Meal?>(
100+
routeData: routeData,
101+
child: _i11.AddMealScreen(day: args.day, key: args.key));
99102
}
100103
};
101104

@@ -142,14 +145,14 @@ class AppRouter extends _i12.RootStackRouter {
142145
path: 'clients',
143146
parent: MainRouterPage.name,
144147
guards: [homeGuard]),
145-
_i12.RouteConfig(EmptyRouterPageRoute.name,
148+
_i12.RouteConfig(DiaryRouterPage.name,
146149
path: 'diary',
147150
parent: MainRouterPage.name,
148151
children: [
149152
_i12.RouteConfig(DiaryScreenRoute.name,
150-
path: '', parent: EmptyRouterPageRoute.name),
153+
path: '', parent: DiaryRouterPage.name),
151154
_i12.RouteConfig(AddMealScreenRoute.name,
152-
path: 'add', parent: EmptyRouterPageRoute.name)
155+
path: 'add', parent: DiaryRouterPage.name)
153156
])
154157
]),
155158
_i12.RouteConfig(ProfileScreenRoute.name,
@@ -251,12 +254,11 @@ class ClientListScreenRoute extends _i12.PageRouteInfo<void> {
251254

252255
/// generated route for
253256
/// [_i4.EmptyRouterPage]
254-
class EmptyRouterPageRoute extends _i12.PageRouteInfo<void> {
255-
const EmptyRouterPageRoute({List<_i12.PageRouteInfo>? children})
256-
: super(EmptyRouterPageRoute.name,
257-
path: 'diary', initialChildren: children);
257+
class DiaryRouterPage extends _i12.PageRouteInfo<void> {
258+
const DiaryRouterPage({List<_i12.PageRouteInfo>? children})
259+
: super(DiaryRouterPage.name, path: 'diary', initialChildren: children);
258260

259-
static const String name = 'EmptyRouterPageRoute';
261+
static const String name = 'DiaryRouterPage';
260262
}
261263

262264
/// generated route for
@@ -269,8 +271,23 @@ class DiaryScreenRoute extends _i12.PageRouteInfo<void> {
269271

270272
/// generated route for
271273
/// [_i11.AddMealScreen]
272-
class AddMealScreenRoute extends _i12.PageRouteInfo<void> {
273-
const AddMealScreenRoute() : super(AddMealScreenRoute.name, path: 'add');
274+
class AddMealScreenRoute extends _i12.PageRouteInfo<AddMealScreenRouteArgs> {
275+
AddMealScreenRoute({required DateTime day, _i13.Key? key})
276+
: super(AddMealScreenRoute.name,
277+
path: 'add', args: AddMealScreenRouteArgs(day: day, key: key));
274278

275279
static const String name = 'AddMealScreenRoute';
276280
}
281+
282+
class AddMealScreenRouteArgs {
283+
const AddMealScreenRouteArgs({required this.day, this.key});
284+
285+
final DateTime day;
286+
287+
final _i13.Key? key;
288+
289+
@override
290+
String toString() {
291+
return 'AddMealScreenRouteArgs{day: $day, key: $key}';
292+
}
293+
}

0 commit comments

Comments
 (0)