added provider for recipe wizard
This commit is contained in:
@@ -13,4 +13,12 @@ class Ingredient {
|
||||
this.possibleUnits = const [],
|
||||
this.preferredBrands = const [],
|
||||
});
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is Ingredient && other.title == title && other.type == type;
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(title, type);
|
||||
}
|
||||
|
||||
@@ -8,4 +8,14 @@ class IngredientListEntry {
|
||||
final bool optional;
|
||||
|
||||
IngredientListEntry(this.ingredient, this.amount, this.unit, this.optional);
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is IngredientListEntry &&
|
||||
ingredient == other.ingredient &&
|
||||
amount == other.amount;
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(ingredient.hashCode, amount.hashCode);
|
||||
}
|
||||
|
||||
@@ -6,26 +6,67 @@ class Recipe {
|
||||
final String title;
|
||||
final String description;
|
||||
final Difficulty difficulty;
|
||||
final List<IngredientListEntry> ingredients = [];
|
||||
final List<String> steps = [];
|
||||
final List<IngredientListEntry> ingredients;
|
||||
final List<String> steps;
|
||||
final DateTime datePublished;
|
||||
final Duration prepTime;
|
||||
final Duration cookTime;
|
||||
final Duration totalTime;
|
||||
final List<String> keywords = [];
|
||||
final List<String> keywords;
|
||||
final MealCategory mealCategory;
|
||||
final Cuisine cuisine;
|
||||
|
||||
Recipe({
|
||||
required this.id,
|
||||
required this.title,
|
||||
required this.description,
|
||||
required this.difficulty,
|
||||
this.id = -1,
|
||||
this.title = '',
|
||||
this.description = '',
|
||||
this.difficulty = Difficulty.notSelected,
|
||||
required this.datePublished,
|
||||
required this.prepTime,
|
||||
required this.cookTime,
|
||||
required this.totalTime,
|
||||
required this.mealCategory,
|
||||
required this.cuisine,
|
||||
this.prepTime = const Duration(),
|
||||
this.cookTime = const Duration(),
|
||||
this.totalTime = const Duration(),
|
||||
this.mealCategory = MealCategory.notSelected,
|
||||
this.cuisine = Cuisine.notSelected,
|
||||
this.ingredients = const [],
|
||||
this.keywords = const [],
|
||||
this.steps = const [],
|
||||
});
|
||||
|
||||
Recipe copyWith({
|
||||
int? id,
|
||||
String? title,
|
||||
String? description,
|
||||
Difficulty? difficulty,
|
||||
List<IngredientListEntry>? ingredients,
|
||||
List<String>? steps,
|
||||
DateTime? datePublished,
|
||||
Duration? prepTime,
|
||||
Duration? cookTime,
|
||||
Duration? totalTime,
|
||||
List<String>? keywords,
|
||||
MealCategory? mealCategory,
|
||||
Cuisine? cuisine,
|
||||
}) {
|
||||
return Recipe(
|
||||
id: id ?? this.id,
|
||||
title: title ?? this.title,
|
||||
description: description ?? this.description,
|
||||
difficulty: difficulty ?? this.difficulty,
|
||||
ingredients: ingredients != null
|
||||
? List<IngredientListEntry>.from(ingredients)
|
||||
: List<IngredientListEntry>.from(this.ingredients),
|
||||
steps: steps != null
|
||||
? List<String>.from(steps)
|
||||
: List<String>.from(this.steps),
|
||||
datePublished: datePublished ?? this.datePublished,
|
||||
prepTime: prepTime ?? this.prepTime,
|
||||
cookTime: cookTime ?? this.cookTime,
|
||||
totalTime: totalTime ?? this.totalTime,
|
||||
keywords: keywords != null
|
||||
? List<String>.from(keywords)
|
||||
: List<String>.from(this.keywords),
|
||||
mealCategory: mealCategory ?? this.mealCategory,
|
||||
cuisine: cuisine ?? this.cuisine,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
151
lib/services/providers/recipe_provider.dart
Normal file
151
lib/services/providers/recipe_provider.dart
Normal file
@@ -0,0 +1,151 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../../models/ingredient_list_entry.dart';
|
||||
import '../../models/recipe.dart';
|
||||
import '../../src/enums.dart';
|
||||
|
||||
class RecipeProvider extends ChangeNotifier {
|
||||
Recipe _recipe = Recipe(datePublished: DateTime.now());
|
||||
|
||||
Recipe get recipe => _recipe;
|
||||
|
||||
void updateTitle(String title, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(title: title);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateDescription(String description, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(description: description);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateDifficulty(Difficulty difficulty, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(difficulty: difficulty);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateIngredients(List<IngredientListEntry> ingredients,
|
||||
{bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(ingredients: ingredients);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateSteps(List<String> steps, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(steps: steps);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateDatePublished(DateTime datePublished, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(datePublished: datePublished);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updatePrepTime(Duration prepTime, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(prepTime: prepTime);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateCookTime(Duration cookTime, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(cookTime: cookTime);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateTotalTime(Duration totalTime, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(totalTime: totalTime);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateKeywords(List<String> keywords, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(keywords: keywords);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateMealCategory(MealCategory mealCategory, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(mealCategory: mealCategory);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void updateCuisine(Cuisine cuisine, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(cuisine: cuisine);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
// Helper methods for list operations
|
||||
void addIngredient(IngredientListEntry ingredient, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(
|
||||
ingredients: [..._recipe.ingredients, ingredient],
|
||||
);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void removeIngredient(IngredientListEntry ingredient, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(
|
||||
ingredients: _recipe.ingredients.where((i) => i != ingredient).toList(),
|
||||
);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void addStep(String step, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(
|
||||
steps: [..._recipe.steps, step],
|
||||
);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void removeStep(String step, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(
|
||||
steps: _recipe.steps.where((s) => s != step).toList(),
|
||||
);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void addKeyword(String keyword, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(
|
||||
keywords: [..._recipe.keywords, keyword],
|
||||
);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void removeKeyword(String keyword, {bool silent = false}) {
|
||||
_recipe = _recipe.copyWith(
|
||||
keywords: _recipe.keywords.where((k) => k != keyword).toList(),
|
||||
);
|
||||
if (!silent) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ enum Difficulty {
|
||||
}
|
||||
|
||||
enum IngredientType {
|
||||
notSelected,
|
||||
vegetable,
|
||||
meat,
|
||||
fish,
|
||||
@@ -28,6 +29,7 @@ enum IngredientType {
|
||||
}
|
||||
|
||||
enum MealCategory {
|
||||
notSelected,
|
||||
// Main Meals
|
||||
breakfast,
|
||||
brunch,
|
||||
@@ -44,6 +46,7 @@ enum MealCategory {
|
||||
}
|
||||
|
||||
enum Cuisine {
|
||||
notSelected,
|
||||
// Asian Cuisines
|
||||
chinese,
|
||||
japanese,
|
||||
|
||||
Reference in New Issue
Block a user