18
18
19
19
import 'dart:convert' ;
20
20
import 'dart:developer' ;
21
- import 'dart:io' ;
22
21
23
22
import 'package:flutter/material.dart' ;
24
- import 'package:http/http.dart' as http;
25
23
import 'package:shared_preferences/shared_preferences.dart' ;
26
24
import 'package:wger/exceptions/http_exception.dart' ;
27
25
import 'package:wger/helpers/consts.dart' ;
@@ -31,10 +29,9 @@ import 'package:wger/models/nutrition/log.dart';
31
29
import 'package:wger/models/nutrition/meal.dart' ;
32
30
import 'package:wger/models/nutrition/meal_item.dart' ;
33
31
import 'package:wger/models/nutrition/nutritional_plan.dart' ;
34
- import 'package:wger/providers/auth.dart' ;
35
32
import 'package:wger/providers/base_provider.dart' ;
36
33
37
- class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
34
+ class NutritionPlansProvider with ChangeNotifier {
38
35
static const _nutritionalPlansPath = 'nutritionplan' ;
39
36
static const _nutritionalPlansInfoPath = 'nutritionplaninfo' ;
40
37
static const _mealPath = 'meal' ;
@@ -44,12 +41,11 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
44
41
static const _nutritionDiaryPath = 'nutritiondiary' ;
45
42
static const _ingredientImagePath = 'ingredient-image' ;
46
43
44
+ final WgerBaseProvider baseProvider;
47
45
List <NutritionalPlan > _plans = [];
48
46
List <Ingredient > _ingredients = [];
49
47
50
- NutritionPlansProvider (AuthProvider auth, List <NutritionalPlan > entries, [http.Client ? client])
51
- : _plans = entries,
52
- super (auth, client);
48
+ NutritionPlansProvider (this .baseProvider, List <NutritionalPlan > entries) : _plans = entries;
53
49
54
50
List <NutritionalPlan > get items {
55
51
return [..._plans];
@@ -86,7 +82,8 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
86
82
/// Fetches and sets all plans sparsely, i.e. only with the data on the plan
87
83
/// object itself and no child attributes
88
84
Future <void > fetchAndSetAllPlansSparse () async {
89
- final data = await fetch (makeUrl (_nutritionalPlansPath, query: {'limit' : '1000' }));
85
+ final url = baseProvider.makeUrl (_nutritionalPlansPath, query: {'limit' : '1000' });
86
+ final data = await baseProvider.fetch (url);
90
87
for (final planData in data['results' ]) {
91
88
final plan = NutritionalPlan .fromJson (planData);
92
89
_plans.add (plan);
@@ -97,7 +94,7 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
97
94
98
95
/// Fetches and sets all plans fully, i.e. with all corresponding child objects
99
96
Future <void > fetchAndSetAllPlansFull () async {
100
- final data = await fetch (makeUrl (_nutritionalPlansPath));
97
+ final data = await baseProvider. fetch (baseProvider. makeUrl (_nutritionalPlansPath));
101
98
for (final entry in data['results' ]) {
102
99
await fetchAndSetPlanFull (entry['id' ]);
103
100
}
@@ -108,7 +105,8 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
108
105
/// This method only loads the data on the nutritional plan object itself,
109
106
/// no meals, etc.
110
107
Future <NutritionalPlan > fetchAndSetPlanSparse (int planId) async {
111
- final planData = await fetch (makeUrl (_nutritionalPlansPath, id: planId));
108
+ final url = baseProvider.makeUrl (_nutritionalPlansPath, id: planId);
109
+ final planData = await baseProvider.fetch (url);
112
110
final plan = NutritionalPlan .fromJson (planData);
113
111
_plans.add (plan);
114
112
_plans.sort ((a, b) => b.creationDate.compareTo (a.creationDate));
@@ -127,7 +125,8 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
127
125
}
128
126
129
127
// Plan
130
- final fullPlanData = await fetch (makeUrl (_nutritionalPlansInfoPath, id: planId));
128
+ final url = baseProvider.makeUrl (_nutritionalPlansInfoPath, id: planId);
129
+ final fullPlanData = await baseProvider.fetch (url);
131
130
132
131
// Meals
133
132
final List <Meal > meals = [];
@@ -161,7 +160,10 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
161
160
}
162
161
163
162
Future <NutritionalPlan > addPlan (NutritionalPlan planData) async {
164
- final data = await post (planData.toJson (), makeUrl (_nutritionalPlansPath));
163
+ final data = await baseProvider.post (
164
+ planData.toJson (),
165
+ baseProvider.makeUrl (_nutritionalPlansPath),
166
+ );
165
167
final plan = NutritionalPlan .fromJson (data);
166
168
_plans.add (plan);
167
169
_plans.sort ((a, b) => b.creationDate.compareTo (a.creationDate));
@@ -170,7 +172,10 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
170
172
}
171
173
172
174
Future <void > editPlan (NutritionalPlan plan) async {
173
- await patch (plan.toJson (), makeUrl (_nutritionalPlansPath, id: plan.id));
175
+ await baseProvider.patch (
176
+ plan.toJson (),
177
+ baseProvider.makeUrl (_nutritionalPlansPath, id: plan.id),
178
+ );
174
179
notifyListeners ();
175
180
}
176
181
@@ -180,7 +185,7 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
180
185
_plans.removeAt (existingPlanIndex);
181
186
notifyListeners ();
182
187
183
- final response = await deleteRequest (_nutritionalPlansPath, id);
188
+ final response = await baseProvider. deleteRequest (_nutritionalPlansPath, id);
184
189
185
190
if (response.statusCode >= 400 ) {
186
191
_plans.insert (existingPlanIndex, existingPlan);
@@ -193,7 +198,10 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
193
198
/// Adds a meal to a plan
194
199
Future <Meal > addMeal (Meal meal, int planId) async {
195
200
final plan = findById (planId);
196
- final data = await post (meal.toJson (), makeUrl (_mealPath));
201
+ final data = await baseProvider.post (
202
+ meal.toJson (),
203
+ baseProvider.makeUrl (_mealPath),
204
+ );
197
205
198
206
meal = Meal .fromJson (data);
199
207
plan.meals.add (meal);
@@ -204,7 +212,10 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
204
212
205
213
/// Edits an existing meal
206
214
Future <Meal > editMeal (Meal meal) async {
207
- final data = await patch (meal.toJson (), makeUrl (_mealPath, id: meal.id));
215
+ final data = await baseProvider.patch (
216
+ meal.toJson (),
217
+ baseProvider.makeUrl (_mealPath, id: meal.id),
218
+ );
208
219
meal = Meal .fromJson (data);
209
220
210
221
notifyListeners ();
@@ -221,7 +232,7 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
221
232
notifyListeners ();
222
233
223
234
// Try to delete
224
- final response = await deleteRequest (_mealPath, meal.id! );
235
+ final response = await baseProvider. deleteRequest (_mealPath, meal.id! );
225
236
if (response.statusCode >= 400 ) {
226
237
plan.meals.insert (mealIndex, existingMeal);
227
238
notifyListeners ();
@@ -231,7 +242,7 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
231
242
232
243
/// Adds a meal item to a meal
233
244
Future <MealItem > addMealItem (MealItem mealItem, Meal meal) async {
234
- final data = await post (mealItem.toJson (), makeUrl (_mealItemPath));
245
+ final data = await baseProvider. post (mealItem.toJson (), baseProvider. makeUrl (_mealItemPath));
235
246
236
247
mealItem = MealItem .fromJson (data);
237
248
mealItem.ingredientObj = await fetchIngredient (mealItem.ingredientId);
@@ -251,7 +262,7 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
251
262
notifyListeners ();
252
263
253
264
// Try to delete
254
- final response = await deleteRequest (_mealItemPath, mealItem.id! );
265
+ final response = await baseProvider. deleteRequest (_mealItemPath, mealItem.id! );
255
266
if (response.statusCode >= 400 ) {
256
267
meal.mealItems.insert (mealItemIndex, existingMealItem);
257
268
notifyListeners ();
@@ -271,7 +282,9 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
271
282
272
283
// Get ingredient from the server and save to cache
273
284
} on StateError {
274
- final data = await fetch (makeUrl (_ingredientPath, id: ingredientId));
285
+ final data = await baseProvider.fetch (
286
+ baseProvider.makeUrl (_ingredientPath, id: ingredientId),
287
+ );
275
288
ingredient = Ingredient .fromJson (data);
276
289
_ingredients.add (ingredient);
277
290
@@ -315,24 +328,12 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
315
328
}
316
329
317
330
// Send the request
318
- final response = await client.get (
319
- makeUrl (
320
- _ingredientSearchPath,
321
- query: {'term' : name, 'language' : languageCode},
322
- ),
323
- headers: < String , String > {
324
- HttpHeaders .authorizationHeader: 'Token ${auth .token }' ,
325
- HttpHeaders .userAgentHeader: auth.getAppNameHeader (),
326
- },
331
+ final response = await baseProvider.fetch (
332
+ baseProvider.makeUrl (_ingredientSearchPath, query: {'term' : name, 'language' : languageCode}),
327
333
);
328
334
329
- // Something wrong with our request
330
- if (response.statusCode >= 400 ) {
331
- throw WgerHttpException (response.body);
332
- }
333
-
334
335
// Process the response
335
- return json. decode (utf8. decode ( response.bodyBytes)) ['suggestions' ] as List < dynamic > ;
336
+ return response['suggestions' ];
336
337
}
337
338
338
339
/// Searches for an ingredient with code
@@ -342,11 +343,8 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
342
343
}
343
344
344
345
// Send the request
345
- final data = await fetch (
346
- makeUrl (
347
- _ingredientPath,
348
- query: {'code' : code},
349
- ),
346
+ final data = await baseProvider.fetch (
347
+ baseProvider.makeUrl (_ingredientPath, query: {'code' : code}),
350
348
);
351
349
352
350
if (data["count" ] == 0 ) {
@@ -362,7 +360,10 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
362
360
final plan = findById (meal.planId);
363
361
final Log log = Log .fromMealItem (item, plan.id! , meal.id);
364
362
365
- final data = await post (log.toJson (), makeUrl (_nutritionDiaryPath));
363
+ final data = await baseProvider.post (
364
+ log.toJson (),
365
+ baseProvider.makeUrl (_nutritionDiaryPath),
366
+ );
366
367
log.id = data['id' ];
367
368
plan.logs.add (log);
368
369
}
@@ -375,15 +376,15 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
375
376
mealItem.ingredientObj = await fetchIngredient (mealItem.ingredientId);
376
377
final Log log = Log .fromMealItem (mealItem, plan.id! , null , dateTime);
377
378
378
- final data = await post (log.toJson (), makeUrl (_nutritionDiaryPath));
379
+ final data = await baseProvider. post (log.toJson (), baseProvider. makeUrl (_nutritionDiaryPath));
379
380
log.id = data['id' ];
380
381
plan.logs.add (log);
381
382
notifyListeners ();
382
383
}
383
384
384
385
/// Deletes a log entry
385
386
Future <void > deleteLog (int logId, int planId) async {
386
- await deleteRequest (_nutritionDiaryPath, logId);
387
+ await baseProvider. deleteRequest (_nutritionDiaryPath, logId);
387
388
388
389
final plan = findById (planId);
389
390
plan.logs.removeWhere ((element) => element.id == logId);
@@ -393,8 +394,11 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier {
393
394
/// Load nutrition diary entries for plan
394
395
Future <void > fetchAndSetLogs (NutritionalPlan plan) async {
395
396
// TODO(x): update fetch to that it can use the pagination
396
- final data = await fetch (
397
- makeUrl (_nutritionDiaryPath, query: {'plan' : plan.id.toString (), 'limit' : '1000' }),
397
+ final data = await baseProvider.fetch (
398
+ baseProvider.makeUrl (
399
+ _nutritionDiaryPath,
400
+ query: {'plan' : plan.id.toString (), 'limit' : '1000' },
401
+ ),
398
402
);
399
403
400
404
plan.logs = [];
0 commit comments