From b17078cdeff01ab7c7fe50563541136e9efaa61a Mon Sep 17 00:00:00 2001 From: SomnusVeritas Date: Sun, 5 Nov 2023 20:54:57 +0100 Subject: [PATCH] changes to recipe class and providers --- lib/example_data.dart | 13 ++++++++++ lib/main.dart | 4 +++ lib/models/recipe.dart | 23 ++++++++++++++-- .../providers/recipe_list_provider.dart | 26 +++++++++++++++++++ lib/services/providers/recipe_provider.dart | 6 +++++ lib/widgets/recipe_list.dart | 21 +++++++++++++++ 6 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 lib/services/providers/recipe_list_provider.dart create mode 100644 lib/widgets/recipe_list.dart diff --git a/lib/example_data.dart b/lib/example_data.dart index 31f956e..08754e1 100644 --- a/lib/example_data.dart +++ b/lib/example_data.dart @@ -1,7 +1,9 @@ +import 'package:rezepte/models/difficulty.dart'; import 'package:rezepte/models/unit.dart'; import 'models/ingredient.dart'; import 'constants.dart' as constants; +import 'models/recipe.dart'; final List _weightAndCount = constants.units .where((element) => @@ -25,3 +27,14 @@ final List exampleIngredients = [ Ingredient(title: 'Milch', possibleUnits: _fluid), Ingredient(title: 'Limettenblätter', possibleUnits: _count), ]; + +final List exampleRecipes = [ + Recipe( + title: 'Wraps', + description: 'Nur ein paar Wraps', + difficulty: Difficulty.hard), + Recipe( + title: 'Burritos', + description: 'Nur ein paar Burritos', + difficulty: Difficulty.easy), +]; diff --git a/lib/main.dart b/lib/main.dart index 6e03efd..7a5ee9f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,12 +2,16 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:rezepte/pages/create_recipe_page.dart'; import 'package:rezepte/pages/dashboard_page.dart'; +import 'package:rezepte/services/providers/recipe_list_provider.dart'; import 'package:rezepte/services/providers/recipe_provider.dart'; import 'theme.dart'; void main() { runApp(MultiProvider(providers: [ + ChangeNotifierProvider( + create: (_) => RecipeListProvider(), + ), ChangeNotifierProvider( create: (_) => RecipeProvider(), ), diff --git a/lib/models/recipe.dart b/lib/models/recipe.dart index a12a97f..4574847 100644 --- a/lib/models/recipe.dart +++ b/lib/models/recipe.dart @@ -6,12 +6,31 @@ class Recipe { final String title; final String description; final Difficulty? difficulty; - final List ingredients = []; - final List steps = []; + final List ingredients; + final List steps; Recipe({ required this.title, this.description = '', this.difficulty, + this.ingredients = const [], + this.steps = const [], }); + + void addIngredient(IngredientListEntry ingredient) => + ingredients.add(ingredient); + + void clearIngredients() => ingredients.clear(); + + void removeIngredientAt(int index) { + ingredients.removeAt(index); + } + + void removeIngredient(IngredientListEntry ingredient) { + ingredients.removeWhere((element) => element == ingredient); + } + + void addStep(CookingStep step) => steps.add(step); + + void removeStepAt(int index) => steps.removeAt(index); } diff --git a/lib/services/providers/recipe_list_provider.dart b/lib/services/providers/recipe_list_provider.dart new file mode 100644 index 0000000..f007a97 --- /dev/null +++ b/lib/services/providers/recipe_list_provider.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; + +import '../../models/recipe.dart'; + +class RecipeListProvider extends ChangeNotifier { + final List _recipes = []; + + set recipes(List recipes) { + _recipes.clear(); + _recipes.addAll(recipes); + notifyListeners(); + } + + List get recipes => _recipes; + + void clearRecipes({silent = false}) { + _recipes.clear(); + + if (!silent) notifyListeners(); + } + + void addRecipe(Recipe recipe, {silent = false}) { + _recipes.add(recipe); + if (!silent) notifyListeners(); + } +} diff --git a/lib/services/providers/recipe_provider.dart b/lib/services/providers/recipe_provider.dart index 972758d..97375de 100644 --- a/lib/services/providers/recipe_provider.dart +++ b/lib/services/providers/recipe_provider.dart @@ -62,21 +62,25 @@ class RecipeProvider extends ChangeNotifier implements Recipe { @override List get ingredients => _ingredients; + @override void addIngredient(IngredientListEntry ingredient) { _ingredients.add(ingredient); notifyListeners(); } + @override void clearIngredients({silent = false}) { ingredients.clear(); if (!silent) notifyListeners(); } + @override void removeIngredientAt(int index, {silent = false}) { ingredients.removeAt(index); if (!silent) notifyListeners(); } + @override void removeIngredient(IngredientListEntry ingredient, {silent = false}) { ingredients.removeWhere((element) => element == ingredient); if (!silent) notifyListeners(); @@ -85,11 +89,13 @@ class RecipeProvider extends ChangeNotifier implements Recipe { @override List get steps => _steps; + @override void addStep(CookingStep step, {silent = false}) { steps.add(step); if (!silent) notifyListeners(); } + @override void removeStepAt(int index, {silent = false}) { steps.removeAt(index); if (!silent) notifyListeners(); diff --git a/lib/widgets/recipe_list.dart b/lib/widgets/recipe_list.dart new file mode 100644 index 0000000..a58f00e --- /dev/null +++ b/lib/widgets/recipe_list.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:rezepte/services/providers/recipe_list_provider.dart'; + +class RecipeList extends StatelessWidget { + const RecipeList({super.key}); + + @override + Widget build(BuildContext context) { + final recipes = + Provider.of(context, listen: true).recipes; + return ListView.builder( + itemCount: recipes.length, + itemBuilder: _recipeListBuilder, + ); + } + + Widget? _recipeListBuilder(BuildContext context, int index) { + return Card(); + } +}