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}
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

View File

@ -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)

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_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<FolderView> {
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<FolderView> {
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<FolderView> {
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<FolderView> {
}
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: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<String, String> headers) {
return "curl -X GET '$url' $headersStr";
}
Future<void> shareNote(Note note) async {
return Share.share(note.body);
}