diff --git a/lib/providers/nutrition.dart b/lib/providers/nutrition.dart index d1603119..11a82485 100644 --- a/lib/providers/nutrition.dart +++ b/lib/providers/nutrition.dart @@ -306,19 +306,31 @@ class NutritionPlansProvider with ChangeNotifier { Future cacheIngredient(Ingredient ingredient, {IngredientDatabase? database}) async { database ??= this.database; - ingredients.add(ingredient); + if (!ingredients.any((e) => e.id == ingredient.id)) { + ingredients.add(ingredient); + } - final data = ingredient.toJson(); - await database - .into(database.ingredients) - .insert( - IngredientsCompanion.insert( - id: ingredient.id, - data: jsonEncode(data), - lastFetched: DateTime.now(), - ), - ); - _logger.finer("Saved ingredient '${ingredient.name}' to db cache"); + final ingredientDb = await (database.select( + database.ingredients, + )..where((e) => e.id.equals(ingredient.id))).getSingleOrNull(); + + if (ingredientDb == null) { + final data = ingredient.toJson(); + try { + await database + .into(database.ingredients) + .insert( + IngredientsCompanion.insert( + id: ingredient.id, + data: jsonEncode(data), + lastFetched: DateTime.now(), + ), + ); + _logger.finer("Saved ingredient '${ingredient.name}' to db cache"); + } catch (e) { + _logger.finer("Error caching ingredient '${ingredient.name}': $e"); + } + } } /// Fetch and return an ingredient