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: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<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: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<NoteEditor> {
}
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: <Widget>[
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'),
),
],
);

View File

@ -22,27 +22,19 @@ Future<String> 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) {

View File

@ -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);
},
);
},

View File

@ -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<Note> {
@ -64,12 +66,19 @@ class NoteSearchDelegate extends SearchDelegate<Note> {
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",
);