diff --git a/assets/langs/en.yaml b/assets/langs/en.yaml index 2e85b5a5..9e6a35f7 100644 --- a/assets/langs/en.yaml +++ b/assets/langs/en.yaml @@ -110,6 +110,7 @@ settings: title: Misc Settings swipe: Swipe to Delete Note listView: List View + confirmDelete: Show a Popup to Confirm Deletes NoteFileNameFormat: iso8601WithTimeZone: ISO8601 With TimeZone iso8601: ISO8601 diff --git a/lib/screens/folder_view.dart b/lib/screens/folder_view.dart index b75dd072..1f52e075 100644 --- a/lib/screens/folder_view.dart +++ b/lib/screens/folder_view.dart @@ -485,10 +485,14 @@ class _FolderViewState extends State { void _deleteNote() async { var note = selectedNote; - var shouldDelete = await showDialog( - context: context, - builder: (context) => NoteDeleteDialog(), - ); + var settings = Provider.of(context, listen: false); + var shouldDelete = true; + if (settings.confirmDelete) { + shouldDelete = await showDialog( + context: context, + builder: (context) => NoteDeleteDialog(), + ); + } if (shouldDelete == true) { var stateContainer = Provider.of(context, listen: false); stateContainer.removeNote(note); diff --git a/lib/screens/note_editor.dart b/lib/screens/note_editor.dart index 8ca195cc..0d4e94d4 100644 --- a/lib/screens/note_editor.dart +++ b/lib/screens/note_editor.dart @@ -17,6 +17,7 @@ import 'package:gitjournal/editors/markdown_editor.dart'; import 'package:gitjournal/editors/raw_editor.dart'; import 'package:gitjournal/error_reporting.dart'; import 'package:gitjournal/repository.dart'; +import 'package:gitjournal/settings.dart'; import 'package:gitjournal/utils.dart'; import 'package:gitjournal/utils/logger.dart'; import 'package:gitjournal/widgets/folder_selection_dialog.dart'; @@ -293,10 +294,14 @@ class NoteEditorState extends State with WidgetsBindingObserver { return; } - var shouldDelete = await showDialog( - context: context, - builder: (context) => NoteDeleteDialog(), - ); + var settings = Provider.of(context, listen: false); + var shouldDelete = true; + if (settings.confirmDelete) { + shouldDelete = await showDialog( + context: context, + builder: (context) => NoteDeleteDialog(), + ); + } if (shouldDelete == true) { _deleteNote(note); diff --git a/lib/screens/settings_misc.dart b/lib/screens/settings_misc.dart index 1b705600..62954638 100644 --- a/lib/screens/settings_misc.dart +++ b/lib/screens/settings_misc.dart @@ -27,6 +27,14 @@ class _SettingsMiscState extends State { settings.save(); }, ), + SwitchListTile( + title: Text(tr('settings.misc.confirmDelete')), + value: settings.confirmDelete, + onChanged: (bool newVal) { + settings.confirmDelete = newVal; + settings.save(); + }, + ), ], crossAxisAlignment: CrossAxisAlignment.start, ); diff --git a/lib/settings.dart b/lib/settings.dart index cdcc8aeb..2bc0da2e 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -65,6 +65,7 @@ class Settings extends ChangeNotifier { Set inlineTagPrefixes = {'#'}; bool bottomMenuBar = true; + bool confirmDelete = true; bool storeInternally = true; String storageLocation = ""; @@ -145,6 +146,7 @@ class Settings extends ChangeNotifier { sshPassword = _getString(pref, "sshPassword") ?? sshPassword; bottomMenuBar = _getBool(pref, "bottomMenuBar") ?? bottomMenuBar; + confirmDelete = _getBool(pref, "confirmDelete") ?? confirmDelete; storeInternally = _getBool(pref, "storeInternally") ?? storeInternally; storageLocation = _getString(pref, "storageLocation") ?? ""; } @@ -241,6 +243,8 @@ class Settings extends ChangeNotifier { defaultSet.inlineTagPrefixes); await _setBool( pref, "bottomMenuBar", bottomMenuBar, defaultSet.bottomMenuBar); + await _setBool( + pref, "confirmDelete", confirmDelete, defaultSet.confirmDelete); await _setBool( pref, "storeInternally", storeInternally, defaultSet.storeInternally); await _setString( @@ -353,6 +357,7 @@ class Settings extends ChangeNotifier { 'emojiParser': emojiParser.toString(), 'folderName': folderName.toString(), 'bottomMenuBar': bottomMenuBar.toString(), + 'confirmDelete': confirmDelete.toString(), 'storeInternally': storeInternally.toString(), 'storageLocation': storageLocation, 'sshPublicKey': sshPublicKey.isNotEmpty.toString(),