FolderView: Implement basic note selection

You can delete or share a note using this.
This commit is contained in:
Vishesh Handa
2020-09-07 16:37:51 +02:00
parent 49dee11a26
commit b9d8a8daa6
4 changed files with 47 additions and 19 deletions

View File

@ -202,7 +202,6 @@ widgets:
text: Purchase for {price} text: Purchase for {price}
fail: Failed to Load fail: Failed to Load
FolderView: FolderView:
noteSelected: Note Selected
noteDeleted: Note Deleted noteDeleted: Note Deleted
undo: Undo undo: Undo
syncError: Sync Error {} syncError: Sync Error {}
@ -224,7 +223,7 @@ widgets:
searchFailed: No Search Results Found searchFailed: No Search Results Found
NoteDeleteDialog: NoteDeleteDialog:
title: Do you want to delete this note? title: Do you want to delete this note?
yes: Delete yes: Yes
no: No no: No
rootFolder: Root Folder rootFolder: Root Folder

View File

@ -7,12 +7,12 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:function_types/function_types.dart'; import 'package:function_types/function_types.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:share/share.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/error_reporting.dart'; import 'package:gitjournal/error_reporting.dart';
import 'package:gitjournal/features.dart'; import 'package:gitjournal/features.dart';
import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/pro_overlay.dart'; import 'package:gitjournal/widgets/pro_overlay.dart';
export 'package:gitjournal/editors/scaffold.dart'; export 'package:gitjournal/editors/scaffold.dart';
@ -263,7 +263,7 @@ Widget _buildBottomMenuSheet(
var note = editorState.getNote(); var note = editorState.getNote();
Navigator.of(context).pop(); Navigator.of(context).pop();
Share.share(note.body); shareNote(note);
}, },
), ),
if (metaDataEditable) if (metaDataEditable)

View File

@ -20,6 +20,7 @@ import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/app_bar_menu_button.dart'; import 'package:gitjournal/widgets/app_bar_menu_button.dart';
import 'package:gitjournal/widgets/app_drawer.dart'; import 'package:gitjournal/widgets/app_drawer.dart';
import 'package:gitjournal/widgets/new_note_nav_bar.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/note_search_delegate.dart';
import 'package:gitjournal/widgets/sorting_mode_selector.dart'; import 'package:gitjournal/widgets/sorting_mode_selector.dart';
import 'package:gitjournal/widgets/sync_button.dart'; import 'package:gitjournal/widgets/sync_button.dart';
@ -77,7 +78,7 @@ class _FolderViewState extends State<FolderView> {
var title = widget.notesFolder.publicName; var title = widget.notesFolder.publicName;
if (inSelectionMode) { if (inSelectionMode) {
title = tr('widgets.FolderView.noteSelected'); title = NumberFormat.compact().format(1);
} }
Widget folderView = Builder( Widget folderView = Builder(
@ -92,20 +93,14 @@ class _FolderViewState extends State<FolderView> {
if (!inSelectionMode) { if (!inSelectionMode) {
openNoteEditor(context, note, widget.notesFolder); openNoteEditor(context, note, widget.notesFolder);
} else { } else {
setState(() { _resetSelection();
inSelectionMode = false;
selectedNote = null;
});
} }
}, },
noteLongPressed: (Note note) { noteLongPressed: (Note note) {
// Disabled for now, until I expose actions for the note
/*
setState(() { setState(() {
inSelectionMode = true; inSelectionMode = true;
selectedNote = note; selectedNote = note;
}); });
*/
}, },
isNoteSelected: (n) => n == selectedNote, isNoteSelected: (n) => n == selectedNote,
searchTerm: "", searchTerm: "",
@ -121,12 +116,7 @@ class _FolderViewState extends State<FolderView> {
var backButton = IconButton( var backButton = IconButton(
icon: const Icon(Icons.arrow_back), icon: const Icon(Icons.arrow_back),
onPressed: () { onPressed: _resetSelection,
setState(() {
inSelectionMode = false;
selectedNote = null;
});
},
); );
return Scaffold( return Scaffold(
@ -421,6 +411,40 @@ class _FolderViewState extends State<FolderView> {
} }
List<Widget> _buildInSelectionNoteActions() { List<Widget> _buildInSelectionNoteActions() {
return []; return <Widget>[
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<StateContainer>(context, listen: false);
stateContainer.removeNote(note);
}
_resetSelection();
}
void _resetSelection() {
setState(() {
selectedNote = null;
inSelectionMode = false;
});
} }
} }

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:package_info/package_info.dart'; import 'package:package_info/package_info.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:share/share.dart';
import 'package:gitjournal/core/notes_folder_fs.dart'; import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
@ -88,3 +89,7 @@ String toCurlCommand(String url, Map<String, String> headers) {
return "curl -X GET '$url' $headersStr"; return "curl -X GET '$url' $headersStr";
} }
Future<void> shareNote(Note note) async {
return Share.share(note.body);
}