mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-26 16:46:51 +08:00
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:
@ -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?",
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -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'),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
},
|
||||
);
|
||||
},
|
||||
|
@ -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",
|
||||
);
|
||||
|
Reference in New Issue
Block a user