MarkdownEditor: Allow the default view to be configurable

Fixes #98
This commit is contained in:
Vishesh Handa
2020-04-16 13:16:02 +02:00
parent d03213178c
commit afe94da638
3 changed files with 76 additions and 5 deletions

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/editors/common.dart';
import 'package:gitjournal/editors/note_title_editor.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/widgets/note_viewer.dart';
class MarkdownEditor extends StatefulWidget implements Editor {
@ -51,6 +52,9 @@ class MarkdownEditorState extends State<MarkdownEditor> implements EditorState {
MarkdownEditorState(this.note) {
_textController = TextEditingController(text: note.body);
_titleTextController = TextEditingController(text: note.title);
editingMode = Settings.instance.markdownDefaultView ==
SettingsMarkdownDefaultView.Edit;
}
@override

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:gitjournal/screens/settings_screen.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/screens/settings_widgets.dart';
@ -12,7 +13,7 @@ class SettingsEditorsScreenState extends State<SettingsEditorsScreen> {
Widget build(BuildContext context) {
var settings = Settings.instance;
var body = Column(children: <Widget>[
var body = ListView(children: <Widget>[
ListPreference(
title: "Default Editor",
currentOption: settings.defaultEditor.toPublicString(),
@ -25,6 +26,20 @@ class SettingsEditorsScreenState extends State<SettingsEditorsScreen> {
setState(() {});
},
),
SettingsHeader("Markdown Editor Settings"),
ListPreference(
title: "Default State",
currentOption: settings.markdownDefaultView.toPublicString(),
options: SettingsMarkdownDefaultView.options
.map((f) => f.toPublicString())
.toList(),
onChange: (String publicStr) {
var val = SettingsMarkdownDefaultView.fromPublicString(publicStr);
Settings.instance.markdownDefaultView = val;
Settings.instance.save();
setState(() {});
},
),
]);
return Scaffold(
@ -37,10 +52,7 @@ class SettingsEditorsScreenState extends State<SettingsEditorsScreen> {
},
),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: body,
),
body: body,
);
}
}

View File

@ -39,6 +39,9 @@ class Settings {
String _pseudoId;
String get pseudoId => _pseudoId;
SettingsMarkdownDefaultView markdownDefaultView =
SettingsMarkdownDefaultView.Default;
void load(SharedPreferences pref) {
gitAuthor = pref.getString("gitAuthor") ?? gitAuthor;
gitAuthorEmail = pref.getString("gitAuthorEmail") ?? gitAuthorEmail;
@ -64,6 +67,8 @@ class Settings {
SettingsEditorType.fromInternalString(pref.getString("defaultEditor"));
defaultView = SettingsFolderViewType.fromInternalString(
pref.getString("defaultView"));
markdownDefaultView = SettingsMarkdownDefaultView.fromInternalString(
pref.getString("markdownDefaultView"));
showNoteSummary = pref.getBool("showNoteSummary") ?? showNoteSummary;
folderViewHeaderType =
@ -94,6 +99,8 @@ class Settings {
pref.setString("sortingMode", sortingMode.toInternalString());
pref.setString("defaultEditor", defaultEditor.toInternalString());
pref.setString("defaultView", defaultView.toInternalString());
pref.setString(
"markdownDefaultView", markdownDefaultView.toInternalString());
pref.setBool("showNoteSummary", showNoteSummary);
pref.setString("folderViewHeaderType", folderViewHeaderType);
pref.setInt("settingsVersion", version);
@ -124,6 +131,7 @@ class Settings {
"version": version,
"proMode": proMode,
'pseudoId': pseudoId,
'markdownDefaultView': markdownDefaultView,
};
}
@ -399,3 +407,50 @@ class SettingsFolderViewType {
return SettingsFolderViewType.Default;
}
}
class SettingsMarkdownDefaultView {
static const Edit = SettingsMarkdownDefaultView("Edit");
static const View = SettingsMarkdownDefaultView("View");
static const Default = Edit;
final String _str;
const SettingsMarkdownDefaultView(this._str);
String toInternalString() {
return _str;
}
String toPublicString() {
return _str;
}
static const options = <SettingsMarkdownDefaultView>[
Edit,
View,
];
static SettingsMarkdownDefaultView fromInternalString(String str) {
for (var opt in options) {
if (opt.toInternalString() == str) {
return opt;
}
}
return Default;
}
static SettingsMarkdownDefaultView fromPublicString(String str) {
for (var opt in options) {
if (opt.toPublicString() == str) {
return opt;
}
}
return Default;
}
@override
String toString() {
assert(
false, "SettingsMarkdownDefaultView toString should never be called");
return "";
}
}