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