diff --git a/lib/screens/journal_listing.dart b/lib/screens/journal_listing.dart index 084c7c6a..edbcd76f 100644 --- a/lib/screens/journal_listing.dart +++ b/lib/screens/journal_listing.dart @@ -1,8 +1,11 @@ import 'package:flutter/material.dart'; +import 'package:fimber/fimber.dart'; +import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/state_container.dart'; +import 'package:gitjournal/utils.dart'; import 'package:gitjournal/widgets/app_drawer.dart'; import 'package:gitjournal/widgets/app_bar_menu_button.dart'; import 'package:gitjournal/widgets/journal_list.dart'; @@ -28,18 +31,6 @@ class JournalListingScreen extends StatelessWidget { var allNotes = notesFolder.getNotes(); allNotes.sort((a, b) => b.compareTo(a)); - Widget journalList = JournalList( - notes: allNotes, - noteSelectedFunction: (noteIndex) { - var note = allNotes[noteIndex]; - var route = MaterialPageRoute( - builder: (context) => NoteEditor.fromNote(note), - ); - Navigator.of(context).push(route); - }, - emptyText: "Let's add some notes?", - ); - var title = notesFolder.parent == null ? "Notes" : notesFolder.pathSpec(); return Scaffold( @@ -62,7 +53,7 @@ class JournalListingScreen extends StatelessWidget { floatingActionButton: createButton, body: Center( child: RefreshIndicator( - child: Scrollbar(child: journalList), + child: Scrollbar(child: buildJournalList(allNotes)), onRefresh: () async => _syncRepo(context), ), ), @@ -80,4 +71,28 @@ class JournalListingScreen extends StatelessWidget { builder: (context) => NoteEditor.newNote(notesFolder)); Navigator.of(context).push(route); } + + Widget buildJournalList(List allNotes) { + return Builder( + builder: (context) { + return JournalList( + notes: allNotes, + noteSelectedFunction: (noteIndex) async { + var note = allNotes[noteIndex]; + var route = MaterialPageRoute( + builder: (context) => NoteEditor.fromNote(note), + ); + var showUndoSnackBar = await Navigator.of(context).push(route); + if (showUndoSnackBar != null) { + Fimber.d("Showing an undo snackbar"); + + var snackBar = buildUndoDeleteSnackbar(context, note); + Scaffold.of(context).showSnackBar(snackBar); + } + }, + emptyText: "Let's add some notes?", + ); + }, + ); + } } diff --git a/lib/screens/note_editor.dart b/lib/screens/note_editor.dart index b02bb1aa..1d78beca 100644 --- a/lib/screens/note_editor.dart +++ b/lib/screens/note_editor.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:fimber/fimber.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; @@ -8,12 +7,13 @@ import 'package:gitjournal/editors/raw_editor.dart'; import 'package:gitjournal/editors/todo_editor.dart'; import 'package:gitjournal/state_container.dart'; import 'package:gitjournal/core/note_data_serializers.dart'; -import 'package:gitjournal/utils.dart'; import 'package:gitjournal/widgets/folder_selection_dialog.dart'; import 'package:gitjournal/widgets/rename_dialog.dart'; final todoEditorEnabled = true; +class ShowUndoSnackbar {} + class NoteEditor extends StatefulWidget { final Note note; final NotesFolder notesFolder; @@ -195,32 +195,26 @@ class NoteEditorState extends State { } Widget _buildAlertDialog(BuildContext context) { - var title = "Do you want to delete this note?"; - var editText = "Keep Writing"; - var discardText = "Discard"; - return AlertDialog( - title: Text(title), + title: const Text('Do you want to delete this note?'), actions: [ FlatButton( onPressed: () => Navigator.of(context).pop(false), - child: Text(editText), + child: const Text('Keep Writing'), ), FlatButton( onPressed: () { _deleteNote(note); Navigator.pop(context); // Alert box - Navigator.pop(context); // Note Editor - if (!_isNewNote) { - Fimber.d("Showing an undo snackbar"); - - final stateContainer = StateContainer.of(context); - showUndoDeleteSnackbar(context, stateContainer, note); + if (_isNewNote) { + Navigator.pop(context); // Note Editor + } else { + Navigator.pop(context, ShowUndoSnackbar()); // Note Editor } }, - child: Text(discardText), + child: const Text('Delete'), ), ], ); diff --git a/lib/utils.dart b/lib/utils.dart index f407162c..e9492030 100644 --- a/lib/utils.dart +++ b/lib/utils.dart @@ -22,27 +22,19 @@ Future getVersionString() async { return versionText; } -void showUndoDeleteSnackbar( - BuildContext context, - StateContainerState stateContainer, - Note deletedNote, -) { - var theme = Theme.of(context); - - Flushbar( - message: "Note Deleted", - duration: const Duration(seconds: 3), - mainButton: FlatButton( - child: Text( - "Undo", - style: TextStyle(color: theme.accentColor), - ), +SnackBar buildUndoDeleteSnackbar(BuildContext context, Note deletedNote) { + return SnackBar( + content: const Text('Note Deleted'), + action: SnackBarAction( + label: "Undo", onPressed: () { Fimber.d("Undoing delete"); + + var stateContainer = StateContainer.of(context); stateContainer.undoRemoveNote(deletedNote); }, ), - ).show(context); + ); } void showSnackbar(BuildContext context, String message) { diff --git a/lib/widgets/journal_list.dart b/lib/widgets/journal_list.dart index 7e7454a1..6f7f4fbc 100644 --- a/lib/widgets/journal_list.dart +++ b/lib/widgets/journal_list.dart @@ -64,7 +64,8 @@ class JournalList extends StatelessWidget { final stateContainer = StateContainer.of(context); stateContainer.removeNote(note); - showUndoDeleteSnackbar(context, stateContainer, note); + var snackBar = buildUndoDeleteSnackbar(context, note); + Scaffold.of(context).showSnackBar(snackBar); }, ); }, diff --git a/lib/widgets/note_search_delegate.dart b/lib/widgets/note_search_delegate.dart index def235b9..feb1236d 100644 --- a/lib/widgets/note_search_delegate.dart +++ b/lib/widgets/note_search_delegate.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; +import 'package:fimber/fimber.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/themes.dart'; +import 'package:gitjournal/utils.dart'; import 'package:gitjournal/widgets/journal_list.dart'; class NoteSearchDelegate extends SearchDelegate { @@ -64,12 +66,19 @@ class NoteSearchDelegate extends SearchDelegate { Widget journalList = JournalList( notes: filteredNotes, - noteSelectedFunction: (noteIndex) { + noteSelectedFunction: (noteIndex) async { var note = filteredNotes[noteIndex]; var route = MaterialPageRoute( builder: (context) => NoteEditor.fromNote(note), ); - Navigator.of(context).push(route); + + var showUndoSnackBar = await Navigator.of(context).push(route); + if (showUndoSnackBar != null) { + Fimber.d("Showing an undo snackbar"); + + var snackBar = buildUndoDeleteSnackbar(context, note); + Scaffold.of(context).showSnackBar(snackBar); + } }, emptyText: "No Search Results Found", );