Files
GitJournal/lib/utils.dart
Vishesh Handa 84fab89f48 Do not allow us to edit the Note Editor if the Note cannot be saved
In some rare cases the note just doesn't get saved on disk - in those
cases instead of silently failing we will refuse to exit the note
editor, forcing the user to copy the note and paste it somewhere else in
order to not lose the date.

This isn't the best solution, but it prevents data loss, in a few edge
cases which I cannot reproduce.

Fixes #124
2020-07-13 17:13:02 +02:00

70 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/screens/note_editor.dart';
import 'package:gitjournal/settings.dart';
import 'package:package_info/package_info.dart';
import 'app.dart';
import 'core/note.dart';
import 'state_container.dart';
import 'utils/logger.dart';
Future<String> getVersionString() async {
var info = await PackageInfo.fromPlatform();
var versionText = "";
if (info != null) {
versionText = info.appName + " " + info.version + "+" + info.buildNumber;
if (JournalApp.isInDebugMode) {
versionText += " (Debug)";
}
}
return versionText;
}
SnackBar buildUndoDeleteSnackbar(
StateContainer stateContainer, Note deletedNote) {
return SnackBar(
content: const Text('Note Deleted'),
action: SnackBarAction(
label: "Undo",
onPressed: () {
Log.d("Undoing delete");
stateContainer.undoRemoveNote(deletedNote);
},
),
);
}
void showSnackbar(BuildContext context, String message) {
var snackBar = SnackBar(content: Text(message));
Scaffold.of(context)
..removeCurrentSnackBar()
..showSnackBar(snackBar);
}
NotesFolderFS getFolderForEditor(
NotesFolderFS rootFolder,
EditorType editorType,
) {
var spec = Settings.instance.defaultNewNoteFolderSpec;
var journalSpec = Settings.instance.journalEditordefaultNewNoteFolderSpec;
switch (editorType) {
case EditorType.Journal:
return rootFolder.getFolderWithSpec(journalSpec);
default:
return rootFolder.getFolderWithSpec(spec);
}
}
Future<void> showAlertDialog(
BuildContext context, String title, String message) async {
var dialog = AlertDialog(
title: Text(title),
content: Text(message),
);
return showDialog(context: context, builder: (context) => dialog);
}