@@ -2,8 +2,10 @@ import 'package:flutter/material.dart';
22import 'package:flutter_bloc/flutter_bloc.dart' ;
33import 'package:flutter_translate/flutter_translate.dart' ;
44import 'package:nc_cookbook_api/nc_cookbook_api.dart' ;
5+ import 'package:nextcloud_cookbook_flutter/src/blocs/categories/categories_bloc.dart' ;
56import 'package:nextcloud_cookbook_flutter/src/blocs/recipe/recipe_bloc.dart' ;
67import 'package:nextcloud_cookbook_flutter/src/screens/form/recipe_form.dart' ;
8+ import 'package:nextcloud_cookbook_flutter/src/widget/alerts/recipe_delete_alert.dart' ;
79
810class RecipeEditScreen extends StatelessWidget {
911 final Recipe recipe;
@@ -27,29 +29,74 @@ class RecipeEditScreen extends StatelessWidget {
2729 appBar: AppBar (
2830 title: BlocListener <RecipeBloc , RecipeState >(
2931 listener: (BuildContext context, RecipeState state) {
30- if (state.status == RecipeStatus .updateFailure) {
31- ScaffoldMessenger .of (context).showSnackBar (
32- SnackBar (
33- content: Text (
34- translate (
35- 'recipe_edit.errors.update_failed' ,
36- args: {"error_msg" : state.error},
32+ switch (state.status) {
33+ case RecipeStatus .updateFailure:
34+ ScaffoldMessenger .of (context).showSnackBar (
35+ SnackBar (
36+ content: Text (
37+ translate (
38+ 'recipe_edit.errors.update_failed' ,
39+ args: {"error_msg" : state.error},
40+ ),
41+ style: TextStyle (
42+ color: Theme .of (context).colorScheme.onError,
43+ ),
3744 ),
38- style: TextStyle (
39- color: Theme .of (context).colorScheme.onError,
45+ backgroundColor: Theme .of (context).colorScheme.error,
46+ ),
47+ );
48+ break ;
49+ case RecipeStatus .deleteFailure:
50+ ScaffoldMessenger .of (context).showSnackBar (
51+ SnackBar (
52+ content: Text (
53+ translate (
54+ 'recipe_edit.errors.update_failed' ,
55+ args: {"error_msg" : state.error},
56+ ),
57+ style: TextStyle (
58+ color: Theme .of (context).colorScheme.onError,
59+ ),
4060 ),
61+ backgroundColor: Theme .of (context).colorScheme.error,
4162 ),
42- backgroundColor: Theme .of (context).colorScheme.error,
43- ),
44- );
45- } else if (state.status == RecipeStatus .updateSuccess) {
46- BlocProvider .of <RecipeBloc >(context)
47- .add (RecipeLoaded (state.recipeId! ));
48- Navigator .pop (context);
63+ );
64+ break ;
65+ case RecipeStatus .updateSuccess:
66+ BlocProvider .of <RecipeBloc >(context)
67+ .add (RecipeLoaded (state.recipeId! ));
68+ Navigator .pop (context);
69+ break ;
70+ case RecipeStatus .delteSuccess:
71+ BlocProvider .of <CategoriesBloc >(context)
72+ .add (const CategoriesLoaded ());
73+ Navigator .pop (context);
74+ Navigator .pop (context);
75+ break ;
76+ default :
4977 }
5078 },
5179 child: Text (translate ('recipe_edit.title' )),
5280 ),
81+ actions: [
82+ IconButton (
83+ icon: const Icon (Icons .delete),
84+ tooltip: translate ("recipe_edit.delete.title" ).toLowerCase (),
85+ color: Theme .of (context).colorScheme.error,
86+ onPressed: () async {
87+ final decision = await showDialog <bool >(
88+ context: context,
89+ builder: (_) => DeleteRecipeAlert (recipe: recipe),
90+ );
91+
92+ if (decision ?? false ) {
93+ // ignore: use_build_context_synchronously
94+ BlocProvider .of <RecipeBloc >(context)
95+ .add (RecipeDeleted (recipe));
96+ }
97+ },
98+ ),
99+ ],
53100 ),
54101 body: RecipeForm (recipe: recipe),
55102 ),
0 commit comments