mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-30 03:19:11 +08:00
FolderView: Implement basic note selection
You can delete or share a note using this.
This commit is contained in:
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user