mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 10:17:16 +08:00
Implement undo delete properly
This way the git History is not modified.
This commit is contained in:
@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_crashlytics/flutter_crashlytics.dart';
|
import 'package:flutter_crashlytics/flutter_crashlytics.dart';
|
||||||
import 'package:journal/apis/git.dart';
|
import 'package:journal/apis/git.dart';
|
||||||
import 'package:journal/app.dart';
|
import 'package:journal/app.dart';
|
||||||
import 'package:journal/gitapp.dart';
|
|
||||||
import 'package:journal/settings.dart';
|
import 'package:journal/settings.dart';
|
||||||
import 'package:journal/state_container.dart';
|
import 'package:journal/state_container.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
@ -5,6 +5,7 @@ import 'package:journal/widgets/note_header.dart';
|
|||||||
|
|
||||||
import 'note.dart';
|
import 'note.dart';
|
||||||
import 'note_editor.dart';
|
import 'note_editor.dart';
|
||||||
|
import 'utils.dart';
|
||||||
|
|
||||||
class NoteBrowsingScreen extends StatefulWidget {
|
class NoteBrowsingScreen extends StatefulWidget {
|
||||||
final List<Note> notes;
|
final List<Note> notes;
|
||||||
@ -23,6 +24,7 @@ class NoteBrowsingScreen extends StatefulWidget {
|
|||||||
|
|
||||||
class NoteBrowsingScreenState extends State<NoteBrowsingScreen> {
|
class NoteBrowsingScreenState extends State<NoteBrowsingScreen> {
|
||||||
PageController pageController;
|
PageController pageController;
|
||||||
|
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||||
|
|
||||||
NoteBrowsingScreenState({@required int noteIndex}) {
|
NoteBrowsingScreenState({@required int noteIndex}) {
|
||||||
pageController = PageController(initialPage: noteIndex);
|
pageController = PageController(initialPage: noteIndex);
|
||||||
@ -39,6 +41,7 @@ class NoteBrowsingScreenState extends State<NoteBrowsingScreen> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
key: _scaffoldKey,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text('TIMELINE'),
|
title: Text('TIMELINE'),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
@ -46,9 +49,16 @@ class NoteBrowsingScreenState extends State<NoteBrowsingScreen> {
|
|||||||
icon: Icon(Icons.delete),
|
icon: Icon(Icons.delete),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
final stateContainer = StateContainer.of(context);
|
final stateContainer = StateContainer.of(context);
|
||||||
Note note = widget.notes[_currentIndex()];
|
var noteIndex = _currentIndex();
|
||||||
|
Note note = widget.notes[noteIndex];
|
||||||
stateContainer.removeNote(note);
|
stateContainer.removeNote(note);
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
|
|
||||||
|
print("Shwoing an undo snackbar");
|
||||||
|
var snackbar = buildUndoDeleteSnackbar(context, note, noteIndex);
|
||||||
|
_scaffoldKey.currentState
|
||||||
|
..removeCurrentSnackBar()
|
||||||
|
..showSnackBar(snackbar);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -172,6 +172,26 @@ class StateContainerState extends State<StateContainer> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
String _getGitDir(BuildContext context) {
|
||||||
|
var state = StateContainer.of(context).appState;
|
||||||
|
if (state.remoteGitRepoConfigured) {
|
||||||
|
return state.remoteGitRepoFolderName;
|
||||||
|
} else {
|
||||||
|
return state.localGitRepoPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void undoRemoveNote(Note note, int index) {
|
||||||
|
setState(() {
|
||||||
|
appState.notes.insert(index, note);
|
||||||
|
noteRepo.resetLastCommit().then((NoteRepoResult _) {
|
||||||
|
_syncNotes();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void insertNote(int index, Note note) {
|
void insertNote(int index, Note note) {
|
||||||
print("State Container insertNote");
|
print("State Container insertNote");
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@ -73,6 +73,11 @@ class GitNoteRepository implements NoteRepository {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<NoteRepoResult> resetLastCommit() async {
|
||||||
|
await gitResetLast(this.dirName);
|
||||||
|
return NoteRepoResult(error: false);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<NoteRepoResult> updateNote(Note note) async {
|
Future<NoteRepoResult> updateNote(Note note) async {
|
||||||
return _addNote(note, "Edited Journal Entry");
|
return _addNote(note, "Edited Journal Entry");
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
import 'package:journal/app.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info/package_info.dart';
|
||||||
|
|
||||||
|
import 'app.dart';
|
||||||
|
import 'note.dart';
|
||||||
|
import 'state_container.dart';
|
||||||
|
|
||||||
Future<String> getVersionString() async {
|
Future<String> getVersionString() async {
|
||||||
var info = await PackageInfo.fromPlatform();
|
var info = await PackageInfo.fromPlatform();
|
||||||
var versionText = "";
|
var versionText = "";
|
||||||
@ -14,3 +18,23 @@ Future<String> getVersionString() async {
|
|||||||
|
|
||||||
return versionText;
|
return versionText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SnackBar buildUndoDeleteSnackbar(
|
||||||
|
BuildContext context,
|
||||||
|
Note deletedNote,
|
||||||
|
int deletedNoteIndex,
|
||||||
|
) {
|
||||||
|
var snackbar = SnackBar(
|
||||||
|
content: Text("Note Deleted"),
|
||||||
|
action: SnackBarAction(
|
||||||
|
label: "Undo",
|
||||||
|
onPressed: () {
|
||||||
|
print("Undoing delete");
|
||||||
|
var stateContainer = StateContainer.of(context);
|
||||||
|
stateContainer.undoRemoveNote(deletedNote, deletedNoteIndex);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return snackbar;
|
||||||
|
}
|
||||||
|
@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:journal/note.dart';
|
import 'package:journal/note.dart';
|
||||||
import 'package:journal/state_container.dart';
|
import 'package:journal/state_container.dart';
|
||||||
|
import 'package:journal/utils.dart';
|
||||||
|
|
||||||
typedef void NoteSelectedFunction(int noteIndex);
|
typedef void NoteSelectedFunction(int noteIndex);
|
||||||
|
|
||||||
@ -37,13 +38,8 @@ class JournalList extends StatelessWidget {
|
|||||||
final stateContainer = StateContainer.of(context);
|
final stateContainer = StateContainer.of(context);
|
||||||
stateContainer.removeNote(note);
|
stateContainer.removeNote(note);
|
||||||
|
|
||||||
Scaffold.of(context).showSnackBar(SnackBar(
|
Scaffold.of(context)
|
||||||
content: Text("Note deleted"),
|
.showSnackBar(buildUndoDeleteSnackbar(context, note, i));
|
||||||
action: SnackBarAction(
|
|
||||||
label: 'Undo',
|
|
||||||
onPressed: () => stateContainer.insertNote(i, note),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user