mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 18:38:36 +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}
|
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
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user