diff --git a/lib/pages/create_recipe_page.dart b/lib/pages/create_recipe_page.dart index 217b474..7f78ee9 100644 --- a/lib/pages/create_recipe_page.dart +++ b/lib/pages/create_recipe_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:rezepte/services/providers/db/dbhelper.dart'; import 'package:rezepte/widgets/ingredients_bottomsheet.dart'; import 'package:rezepte/widgets/will_pop_scope.dart'; import '../models/difficulty.dart'; @@ -34,10 +35,17 @@ class _CreateRecipeState extends State { @override Widget build(BuildContext context) { - recipe = Provider.of(context).recipe; - recipeProvider = Provider.of(context, listen: false); + recipeProvider = Provider.of(context, listen: true); recipeListProvider = Provider.of(context, listen: false); + + if (recipeProvider.recipe == null) { + recipe = Recipe(id: DbHelper.nextRecipeId, title: ''); + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + recipeProvider.recipe = recipe; + }); + } + return CustomWillPopScope( context, ignore: recipe.isEmpty, diff --git a/lib/pages/recipe_detail_page.dart b/lib/pages/recipe_detail_page.dart index 7b2e45a..50e8e02 100644 --- a/lib/pages/recipe_detail_page.dart +++ b/lib/pages/recipe_detail_page.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:rezepte/services/providers/recipe_provider.dart'; +import '../models/recipe.dart'; + class RecipeDetail extends StatelessWidget { const RecipeDetail({super.key}); static const routeName = '/recipeDetail'; @@ -10,6 +12,9 @@ class RecipeDetail extends StatelessWidget { Widget build(BuildContext context) { final recipe = Provider.of(context, listen: false).recipe; + if (recipe == null) Navigator.of(context).pop(); + recipe as Recipe; + return Scaffold( appBar: AppBar(), body: Center( diff --git a/lib/services/providers/db/dbhelper.dart b/lib/services/providers/db/dbhelper.dart index 66f53a5..228d5b0 100644 --- a/lib/services/providers/db/dbhelper.dart +++ b/lib/services/providers/db/dbhelper.dart @@ -30,4 +30,6 @@ class DbHelper { static bool deleteRecipe(Recipe recipe) { return _isar.write((isar) => isar.recipes.delete(recipe.id)); } + + static Stream get recipesChangedStream => _isar.recipes.watchLazy(); } diff --git a/lib/services/providers/recipe_list_provider.dart b/lib/services/providers/recipe_list_provider.dart index 45b451e..6c7ef90 100644 --- a/lib/services/providers/recipe_list_provider.dart +++ b/lib/services/providers/recipe_list_provider.dart @@ -4,6 +4,11 @@ import 'package:rezepte/services/providers/db/dbhelper.dart'; import '../../models/recipe.dart'; class RecipeListProvider extends ChangeNotifier { + RecipeListProvider() { + DbHelper.recipesChangedStream.listen((event) { + notifyListeners(); + }); + } // final List _recipes = []; // set recipes(List recipes) { @@ -20,8 +25,7 @@ class RecipeListProvider extends ChangeNotifier { // if (!silent) notifyListeners(); // } - void addRecipe(Recipe recipe, {silent = false}) { + void addRecipe(Recipe recipe) { DbHelper.putRecipe(recipe); - if (!silent) notifyListeners(); } } diff --git a/lib/services/providers/recipe_provider.dart b/lib/services/providers/recipe_provider.dart index e396221..108dd24 100644 --- a/lib/services/providers/recipe_provider.dart +++ b/lib/services/providers/recipe_provider.dart @@ -5,9 +5,9 @@ import '../../models/recipe.dart'; class RecipeProvider extends ChangeNotifier { Recipe? _recipe; - Recipe get recipe => _recipe ??= Recipe(id: 0, title: ''); + Recipe? get recipe => _recipe; - set recipe(Recipe recipe) { + set recipe(Recipe? recipe) { _recipe = recipe; notifyListeners(); }