From b9d8a8daa68f4ad54081db3dc4f05db5778a192f Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Mon, 7 Sep 2020 16:37:51 +0200 Subject: [PATCH] FolderView: Implement basic note selection You can delete or share a note using this. --- assets/langs/en.yaml | 3 +- lib/editors/common.dart | 4 +-- lib/screens/folder_view.dart | 54 ++++++++++++++++++++++++++---------- lib/utils.dart | 5 ++++ 4 files changed, 47 insertions(+), 19 deletions(-) diff --git a/assets/langs/en.yaml b/assets/langs/en.yaml index 33bd48e7..43018fb9 100644 --- a/assets/langs/en.yaml +++ b/assets/langs/en.yaml @@ -202,7 +202,6 @@ widgets: text: Purchase for {price} fail: Failed to Load FolderView: - noteSelected: Note Selected noteDeleted: Note Deleted undo: Undo syncError: Sync Error {} @@ -224,7 +223,7 @@ widgets: searchFailed: No Search Results Found NoteDeleteDialog: title: Do you want to delete this note? - yes: Delete + yes: Yes no: No rootFolder: Root Folder diff --git a/lib/editors/common.dart b/lib/editors/common.dart index 2a7a7521..d2f68c71 100644 --- a/lib/editors/common.dart +++ b/lib/editors/common.dart @@ -7,12 +7,12 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:function_types/function_types.dart'; import 'package:image_picker/image_picker.dart'; -import 'package:share/share.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/error_reporting.dart'; import 'package:gitjournal/features.dart'; +import 'package:gitjournal/utils.dart'; import 'package:gitjournal/widgets/pro_overlay.dart'; export 'package:gitjournal/editors/scaffold.dart'; @@ -263,7 +263,7 @@ Widget _buildBottomMenuSheet( var note = editorState.getNote(); Navigator.of(context).pop(); - Share.share(note.body); + shareNote(note); }, ), if (metaDataEditable) diff --git a/lib/screens/folder_view.dart b/lib/screens/folder_view.dart index fda808d7..97f79210 100644 --- a/lib/screens/folder_view.dart +++ b/lib/screens/folder_view.dart @@ -20,6 +20,7 @@ import 'package:gitjournal/utils.dart'; import 'package:gitjournal/widgets/app_bar_menu_button.dart'; import 'package:gitjournal/widgets/app_drawer.dart'; import 'package:gitjournal/widgets/new_note_nav_bar.dart'; +import 'package:gitjournal/widgets/note_delete_dialog.dart'; import 'package:gitjournal/widgets/note_search_delegate.dart'; import 'package:gitjournal/widgets/sorting_mode_selector.dart'; import 'package:gitjournal/widgets/sync_button.dart'; @@ -77,7 +78,7 @@ class _FolderViewState extends State { var title = widget.notesFolder.publicName; if (inSelectionMode) { - title = tr('widgets.FolderView.noteSelected'); + title = NumberFormat.compact().format(1); } Widget folderView = Builder( @@ -92,20 +93,14 @@ class _FolderViewState extends State { if (!inSelectionMode) { openNoteEditor(context, note, widget.notesFolder); } else { - setState(() { - inSelectionMode = false; - selectedNote = null; - }); + _resetSelection(); } }, noteLongPressed: (Note note) { - // Disabled for now, until I expose actions for the note - /* setState(() { inSelectionMode = true; selectedNote = note; }); - */ }, isNoteSelected: (n) => n == selectedNote, searchTerm: "", @@ -121,12 +116,7 @@ class _FolderViewState extends State { var backButton = IconButton( icon: const Icon(Icons.arrow_back), - onPressed: () { - setState(() { - inSelectionMode = false; - selectedNote = null; - }); - }, + onPressed: _resetSelection, ); return Scaffold( @@ -421,6 +411,40 @@ class _FolderViewState extends State { } List _buildInSelectionNoteActions() { - return []; + return [ + IconButton( + icon: const Icon(Icons.share), + onPressed: () async { + await shareNote(selectedNote); + _resetSelection(); + }, + ), + IconButton( + icon: const Icon(Icons.delete), + onPressed: _deleteNote, + ), + ]; + } + + void _deleteNote() async { + var note = selectedNote; + + var shouldDelete = await showDialog( + context: context, + builder: (context) => NoteDeleteDialog(), + ); + if (shouldDelete == true) { + var stateContainer = Provider.of(context, listen: false); + stateContainer.removeNote(note); + } + + _resetSelection(); + } + + void _resetSelection() { + setState(() { + selectedNote = null; + inSelectionMode = false; + }); } } diff --git a/lib/utils.dart b/lib/utils.dart index de2a34f4..01ec9f27 100644 --- a/lib/utils.dart +++ b/lib/utils.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:package_info/package_info.dart'; import 'package:provider/provider.dart'; +import 'package:share/share.dart'; import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/screens/note_editor.dart'; @@ -88,3 +89,7 @@ String toCurlCommand(String url, Map headers) { return "curl -X GET '$url' $headersStr"; } + +Future shareNote(Note note) async { + return Share.share(note.body); +}