diff --git a/lib/widgets/newTagDialog.dart b/lib/widgets/newTagDialog.dart index 4039239..0716fa0 100644 --- a/lib/widgets/newTagDialog.dart +++ b/lib/widgets/newTagDialog.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:reciper/models/tag.dart'; import 'package:reciper/utilities/database.dart'; diff --git a/lib/widgets/tagActionsDialog.dart b/lib/widgets/tagActionsDialog.dart new file mode 100644 index 0000000..fc5d6ce --- /dev/null +++ b/lib/widgets/tagActionsDialog.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; +import 'package:reciper/models/tag.dart'; +import 'package:reciper/utilities/database.dart'; + +class TagActionDialog extends StatelessWidget { + final Tag tag; + const TagActionDialog({super.key, required this.tag}); + + @override + Widget build(BuildContext context) { + TextEditingController newTagInputController = + TextEditingController(text: tag.name); + + return AlertDialog( + title: const Text("Tag options"), + content: TextField( + controller: newTagInputController, + decoration: const InputDecoration(hintText: "Rename Tag"), + ), + actions: [ + TextButton( + child: const Text("cancel"), + onPressed: () { + Navigator.pop(context); + }), + TextButton( + child: const Text("delete tag"), + onPressed: () { + DatabaseService.removeTag(tag.id!); + Navigator.pop(context); + }), + TextButton( + child: const Text("save"), + onPressed: () { + tag.name = newTagInputController.text; + DatabaseService.updateTag(tag); + + Navigator.pop(context); + }, + ), + ]); + } +} diff --git a/lib/widgets/tagsSelector.dart b/lib/widgets/tagsSelector.dart index 5af50a5..4f9cb67 100644 --- a/lib/widgets/tagsSelector.dart +++ b/lib/widgets/tagsSelector.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:reciper/models/tag.dart'; import 'package:reciper/utilities/database.dart'; import 'package:reciper/widgets/newTagDialog.dart'; +import 'package:reciper/widgets/tagActionsDialog.dart'; class TagsSelector extends StatefulWidget { final List tags; @@ -74,20 +75,29 @@ class _TagsSelectorState extends State { shrinkWrap: true, itemCount: widget.tags.length, itemBuilder: (BuildContext context, int index) { - return CheckboxListTile( - value: widget.selectedTagsId.contains(widget.tags[index].id), - title: Text(widget.tags[index].name ?? ""), - onChanged: (value) { - setState(() { - if (value ?? false) { - widget.selectedTagsId.add(widget.tags[index].id!); - } else { - widget.selectedTagsId.remove(widget.tags[index].id); - } - widget.onTagsSelectionUpdate(widget.selectedTagsId); - widget.onTagsUpdate(); - }); - }, + return GestureDetector( + onLongPress: () => showDialog( + context: context, + builder: (context) => + TagActionDialog(tag: widget.tags[index])).then((value) { + widget.onTagsUpdate(); + widget.selectedTagsId.clear(); + }), + child: CheckboxListTile( + value: widget.selectedTagsId.contains(widget.tags[index].id), + title: Text(widget.tags[index].name ?? ""), + onChanged: (value) { + setState(() { + if (value ?? false) { + widget.selectedTagsId.add(widget.tags[index].id!); + } else { + widget.selectedTagsId.remove(widget.tags[index].id); + } + widget.onTagsSelectionUpdate(widget.selectedTagsId); + widget.onTagsUpdate(); + }); + }, + ), ); }, ), @@ -96,9 +106,12 @@ class _TagsSelectorState extends State { title: const Text('New Tag'), onTap: () { showDialog( - context: context, - builder: (context) => const NewTagDialog()) - .then((value) => widget.onTagsUpdate()); + context: context, + builder: (context) => const NewTagDialog()).then((value) { + widget.onTagsUpdate().then((value) { + widget.onTagsSelectionUpdate([]); + }); + }); }, ), ],