@@ -4,10 +4,12 @@ import 'package:flutter_spinkit/flutter_spinkit.dart';
44import 'package:flutter_translate/flutter_translate.dart' ;
55import 'package:flutter_typeahead/flutter_typeahead.dart' ;
66import 'package:nc_cookbook_api/nc_cookbook_api.dart' ;
7+ import 'package:nextcloud_cookbook_flutter/src/blocs/categories/categories_bloc.dart' ;
78import 'package:nextcloud_cookbook_flutter/src/blocs/recipe/recipe_bloc.dart' ;
89import 'package:nextcloud_cookbook_flutter/src/screens/recipe_screen.dart' ;
910import 'package:nextcloud_cookbook_flutter/src/services/services.dart' ;
1011import 'package:nextcloud_cookbook_flutter/src/util/theme_data.dart' ;
12+ import 'package:nextcloud_cookbook_flutter/src/widget/alerts/recipe_delete_alert.dart' ;
1113import 'package:nextcloud_cookbook_flutter/src/widget/alerts/recipe_edit_alert.dart' ;
1214import 'package:nextcloud_cookbook_flutter/src/widget/input/duration_form_field.dart' ;
1315import 'package:nextcloud_cookbook_flutter/src/widget/input/integer_text_form_field.dart' ;
@@ -53,6 +55,19 @@ class _RecipeEditScreenState extends State<RecipeEditScreen> {
5355 String get translationKey =>
5456 widget.recipe != null ? 'recipe_edit' : 'recipe_create' ;
5557
58+ Future <void > onDelete () async {
59+ final decision = await showDialog <bool >(
60+ context: context,
61+ builder: (context) => DeleteRecipeAlert (recipe: widget.recipe! ),
62+ );
63+
64+ if (decision ?? false ) {
65+ FocusManager .instance.primaryFocus? .unfocus ();
66+ // ignore: use_build_context_synchronously
67+ BlocProvider .of <RecipeBloc >(context).add (RecipeDeleted (widget.recipe! ));
68+ }
69+ }
70+
5671 void onSubmit () {
5772 if (_formKey.currentState? .validate () ?? false ) {
5873 _formKey.currentState? .save ();
@@ -93,6 +108,16 @@ class _RecipeEditScreenState extends State<RecipeEditScreen> {
93108 return Scaffold (
94109 appBar: AppBar (
95110 title: Text (translate ('$translationKey .title' )),
111+ actions: [
112+ if (widget.recipe != null ) ...[
113+ IconButton (
114+ icon: const Icon (Icons .delete),
115+ tooltip: translate ("recipe_edit.delete.title" ).toLowerCase (),
116+ color: Theme .of (context).colorScheme.error,
117+ onPressed: onDelete,
118+ ),
119+ ],
120+ ],
96121 ),
97122 body: BlocConsumer <RecipeBloc , RecipeState >(
98123 builder: builder,
@@ -309,6 +334,7 @@ class _RecipeEditScreenState extends State<RecipeEditScreen> {
309334 switch (state.status) {
310335 case RecipeStatus .createFailure:
311336 case RecipeStatus .updateFailure:
337+ case RecipeStatus .deleteFailure:
312338 ScaffoldMessenger .of (context).showSnackBar (
313339 SnackBar (
314340 content: Text (
@@ -326,6 +352,11 @@ class _RecipeEditScreenState extends State<RecipeEditScreen> {
326352 BlocProvider .of <RecipeBloc >(context).add (RecipeLoaded (state.recipeId! ));
327353 Navigator .pop (context);
328354 break ;
355+ case RecipeStatus .delteSuccess:
356+ BlocProvider .of <CategoriesBloc >(context).add (const CategoriesLoaded ());
357+ Navigator .pop (context);
358+ Navigator .pop (context);
359+ break ;
329360 case RecipeStatus .createSuccess:
330361 Navigator .pushReplacement (
331362 context,
0 commit comments