UndoSnackBar: Stop using Fimber

It makes everything far more complicated, but at least this way the FAB
moves along with the scaffold. With Fimber, that is not the case, and it
is very annoying.
This commit is contained in:
Vishesh Handa
2020-01-31 17:41:05 +01:00
parent f9a2f4c875
commit 8761f96bbe
5 changed files with 58 additions and 47 deletions

View File

@ -1,8 +1,11 @@
import 'package:flutter/material.dart'; 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/core/notes_folder.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/state_container.dart'; import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/app_drawer.dart'; import 'package:gitjournal/widgets/app_drawer.dart';
import 'package:gitjournal/widgets/app_bar_menu_button.dart'; import 'package:gitjournal/widgets/app_bar_menu_button.dart';
import 'package:gitjournal/widgets/journal_list.dart'; import 'package:gitjournal/widgets/journal_list.dart';
@ -28,18 +31,6 @@ class JournalListingScreen extends StatelessWidget {
var allNotes = notesFolder.getNotes(); var allNotes = notesFolder.getNotes();
allNotes.sort((a, b) => b.compareTo(a)); 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(); var title = notesFolder.parent == null ? "Notes" : notesFolder.pathSpec();
return Scaffold( return Scaffold(
@ -62,7 +53,7 @@ class JournalListingScreen extends StatelessWidget {
floatingActionButton: createButton, floatingActionButton: createButton,
body: Center( body: Center(
child: RefreshIndicator( child: RefreshIndicator(
child: Scrollbar(child: journalList), child: Scrollbar(child: buildJournalList(allNotes)),
onRefresh: () async => _syncRepo(context), onRefresh: () async => _syncRepo(context),
), ),
), ),
@ -80,4 +71,28 @@ class JournalListingScreen extends StatelessWidget {
builder: (context) => NoteEditor.newNote(notesFolder)); builder: (context) => NoteEditor.newNote(notesFolder));
Navigator.of(context).push(route); Navigator.of(context).push(route);
} }
Widget buildJournalList(List<Note> 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?",
);
},
);
}
} }

View File

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fimber/fimber.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.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/editors/todo_editor.dart';
import 'package:gitjournal/state_container.dart'; import 'package:gitjournal/state_container.dart';
import 'package:gitjournal/core/note_data_serializers.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/folder_selection_dialog.dart';
import 'package:gitjournal/widgets/rename_dialog.dart'; import 'package:gitjournal/widgets/rename_dialog.dart';
final todoEditorEnabled = true; final todoEditorEnabled = true;
class ShowUndoSnackbar {}
class NoteEditor extends StatefulWidget { class NoteEditor extends StatefulWidget {
final Note note; final Note note;
final NotesFolder notesFolder; final NotesFolder notesFolder;
@ -195,32 +195,26 @@ class NoteEditorState extends State<NoteEditor> {
} }
Widget _buildAlertDialog(BuildContext context) { Widget _buildAlertDialog(BuildContext context) {
var title = "Do you want to delete this note?";
var editText = "Keep Writing";
var discardText = "Discard";
return AlertDialog( return AlertDialog(
title: Text(title), title: const Text('Do you want to delete this note?'),
actions: <Widget>[ actions: <Widget>[
FlatButton( FlatButton(
onPressed: () => Navigator.of(context).pop(false), onPressed: () => Navigator.of(context).pop(false),
child: Text(editText), child: const Text('Keep Writing'),
), ),
FlatButton( FlatButton(
onPressed: () { onPressed: () {
_deleteNote(note); _deleteNote(note);
Navigator.pop(context); // Alert box Navigator.pop(context); // Alert box
if (_isNewNote) {
Navigator.pop(context); // Note Editor Navigator.pop(context); // Note Editor
} else {
if (!_isNewNote) { Navigator.pop(context, ShowUndoSnackbar()); // Note Editor
Fimber.d("Showing an undo snackbar");
final stateContainer = StateContainer.of(context);
showUndoDeleteSnackbar(context, stateContainer, note);
} }
}, },
child: Text(discardText), child: const Text('Delete'),
), ),
], ],
); );

View File

@ -22,27 +22,19 @@ Future<String> getVersionString() async {
return versionText; return versionText;
} }
void showUndoDeleteSnackbar( SnackBar buildUndoDeleteSnackbar(BuildContext context, Note deletedNote) {
BuildContext context, return SnackBar(
StateContainerState stateContainer, content: const Text('Note Deleted'),
Note deletedNote, action: SnackBarAction(
) { label: "Undo",
var theme = Theme.of(context);
Flushbar(
message: "Note Deleted",
duration: const Duration(seconds: 3),
mainButton: FlatButton(
child: Text(
"Undo",
style: TextStyle(color: theme.accentColor),
),
onPressed: () { onPressed: () {
Fimber.d("Undoing delete"); Fimber.d("Undoing delete");
var stateContainer = StateContainer.of(context);
stateContainer.undoRemoveNote(deletedNote); stateContainer.undoRemoveNote(deletedNote);
}, },
), ),
).show(context); );
} }
void showSnackbar(BuildContext context, String message) { void showSnackbar(BuildContext context, String message) {

View File

@ -64,7 +64,8 @@ class JournalList extends StatelessWidget {
final stateContainer = StateContainer.of(context); final stateContainer = StateContainer.of(context);
stateContainer.removeNote(note); stateContainer.removeNote(note);
showUndoDeleteSnackbar(context, stateContainer, note); var snackBar = buildUndoDeleteSnackbar(context, note);
Scaffold.of(context).showSnackBar(snackBar);
}, },
); );
}, },

View File

@ -1,8 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fimber/fimber.dart';
import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/screens/note_editor.dart'; import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/themes.dart'; import 'package:gitjournal/themes.dart';
import 'package:gitjournal/utils.dart';
import 'package:gitjournal/widgets/journal_list.dart'; import 'package:gitjournal/widgets/journal_list.dart';
class NoteSearchDelegate extends SearchDelegate<Note> { class NoteSearchDelegate extends SearchDelegate<Note> {
@ -64,12 +66,19 @@ class NoteSearchDelegate extends SearchDelegate<Note> {
Widget journalList = JournalList( Widget journalList = JournalList(
notes: filteredNotes, notes: filteredNotes,
noteSelectedFunction: (noteIndex) { noteSelectedFunction: (noteIndex) async {
var note = filteredNotes[noteIndex]; var note = filteredNotes[noteIndex];
var route = MaterialPageRoute( var route = MaterialPageRoute(
builder: (context) => NoteEditor.fromNote(note), 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", emptyText: "No Search Results Found",
); );