Editors: Expose the preview markdown button on all editors

It's nice to sometimes use the RawEditor to edit something and then
later you want to see what it looks, and having to switch to the
Markdown Editor for that is very annoying.
This commit is contained in:
Vishesh Handa
2020-08-20 11:47:31 +02:00
parent 0d71daa09e
commit 7e7503ca2f
6 changed files with 70 additions and 57 deletions

View File

@ -174,6 +174,7 @@ class ChecklistEditorState extends State<ChecklistEditor>
editor: widget,
editorState: this,
noteModified: _noteModified,
isNewNote: widget.isNewNote,
parentFolder: widget.note.parent,
body: Column(
children: <Widget>[

View File

@ -41,12 +41,16 @@ class EditorAppBar extends StatelessWidget implements PreferredSizeWidget {
final EditorState editorState;
final bool noteModified;
final IconButton extraButton;
final bool allowEdits;
final Func0<void> onEditingModeChange;
EditorAppBar({
Key key,
@required this.editor,
@required this.editorState,
@required this.noteModified,
@required this.allowEdits,
@required this.onEditingModeChange,
this.extraButton,
}) : preferredSize = const Size.fromHeight(kToolbarHeight),
super(key: key);
@ -66,6 +70,12 @@ class EditorAppBar extends StatelessWidget implements PreferredSizeWidget {
),
actions: <Widget>[
if (extraButton != null) extraButton,
IconButton(
icon: allowEdits
? const Icon(Icons.remove_red_eye)
: const Icon(Icons.edit),
onPressed: onEditingModeChange,
),
IconButton(
key: const ValueKey("EditorSelector"),
icon: const Icon(Icons.library_books),

View File

@ -103,6 +103,7 @@ class JournalEditorState extends State<JournalEditor>
editor: widget,
editorState: this,
noteModified: _noteModified,
isNewNote: widget.isNewNote,
parentFolder: note.parent,
body: editor,
);

View File

@ -2,8 +2,6 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder.dart';
import 'package:gitjournal/editors/common.dart';
@ -12,11 +10,8 @@ import 'package:gitjournal/editors/heuristics.dart';
import 'package:gitjournal/editors/note_body_editor.dart';
import 'package:gitjournal/editors/note_title_editor.dart';
import 'package:gitjournal/error_reporting.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/utils/logger.dart';
import 'package:gitjournal/widgets/editor_scroll_view.dart';
import 'package:gitjournal/widgets/markdown_toolbar.dart';
import 'package:gitjournal/widgets/note_viewer.dart';
class MarkdownEditor extends StatefulWidget implements Editor {
final Note note;
@ -70,31 +65,18 @@ class MarkdownEditorState extends State<MarkdownEditor>
String _oldText;
bool editingMode = true;
bool _noteModified;
MarkdownEditorState(this.note) {
_textController = TextEditingController(text: note.body);
_titleTextController = TextEditingController(text: note.title);
_oldText = note.body;
var settings = Settings.instance;
if (settings.markdownDefaultView == SettingsMarkdownDefaultView.LastUsed) {
editingMode =
settings.markdownLastUsedView == SettingsMarkdownDefaultView.Edit;
} else {
editingMode =
settings.markdownDefaultView == SettingsMarkdownDefaultView.Edit;
}
}
@override
void initState() {
super.initState();
_noteModified = widget.noteModified;
if (widget.isNewNote) {
editingMode = true;
}
}
@override
@ -133,12 +115,7 @@ class MarkdownEditorState extends State<MarkdownEditor>
),
);
Widget body = editingMode
? editor
: NoteViewer(
note: note,
parentFolder: widget.parentFolder,
);
/*
var settings = Provider.of<Settings>(context);
if (settings.experimentalMarkdownToolbar && editingMode) {
@ -154,43 +131,18 @@ class MarkdownEditorState extends State<MarkdownEditor>
),
);
}
var extraButton = IconButton(
icon: editingMode
? const Icon(Icons.remove_red_eye)
: const Icon(Icons.edit),
onPressed: _switchMode,
);
*/
return EditorScaffold(
editor: widget,
editorState: this,
extraButton: extraButton,
noteModified: _noteModified,
isNewNote: widget.isNewNote,
parentFolder: note.parent,
allowEdits: editingMode,
body: body,
body: editor,
);
}
void _switchMode() {
var settings = Provider.of<Settings>(context);
setState(() {
editingMode = !editingMode;
switch (editingMode) {
case true:
settings.markdownLastUsedView = SettingsMarkdownDefaultView.Edit;
break;
case false:
settings.markdownLastUsedView = SettingsMarkdownDefaultView.View;
break;
}
settings.save();
_updateNote();
});
}
void _updateNote() {
note.title = _titleTextController.text.trim();
note.body = _textController.text.trim();

View File

@ -101,6 +101,7 @@ class RawEditorState extends State<RawEditor>
editor: widget,
editorState: this,
noteModified: _noteModified,
isNewNote: widget.isNewNote,
parentFolder: note.parent,
body: editor,
);

View File

@ -2,27 +2,29 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder_fs.dart';
import 'package:gitjournal/editors/common.dart';
import 'package:gitjournal/settings.dart';
import 'package:gitjournal/widgets/note_viewer.dart';
class EditorScaffold extends StatefulWidget {
final Editor editor;
final EditorState editorState;
final bool noteModified;
final bool isNewNote;
final IconButton extraButton;
final Widget body;
final NotesFolderFS parentFolder;
final bool allowEdits;
EditorScaffold({
@required this.editor,
@required this.editorState,
@required this.noteModified,
@required this.isNewNote,
@required this.body,
@required this.parentFolder,
this.extraButton,
this.allowEdits = true,
});
@override
@ -31,13 +33,33 @@ class EditorScaffold extends StatefulWidget {
class _EditorScaffoldState extends State<EditorScaffold> {
var hideUIElements = false;
var editingMode = true;
Note note;
@override
void initState() {
super.initState();
hideUIElements = Settings.instance.zenMode;
var settings = Settings.instance;
hideUIElements = settings.zenMode;
widget.editorState.addListener(_editorChanged);
if (settings.markdownDefaultView == SettingsMarkdownDefaultView.LastUsed) {
editingMode =
settings.markdownLastUsedView == SettingsMarkdownDefaultView.Edit;
} else {
editingMode =
settings.markdownDefaultView == SettingsMarkdownDefaultView.Edit;
}
if (widget.isNewNote) {
editingMode = true;
}
if (editingMode == false) {
note = widget.editorState.getNote();
}
}
@override
@ -57,9 +79,33 @@ class _EditorScaffoldState extends State<EditorScaffold> {
}
}
void _switchMode() {
var settings = Provider.of<Settings>(context);
setState(() {
editingMode = !editingMode;
switch (editingMode) {
case true:
settings.markdownLastUsedView = SettingsMarkdownDefaultView.Edit;
break;
case false:
settings.markdownLastUsedView = SettingsMarkdownDefaultView.View;
break;
}
settings.save();
note = widget.editorState.getNote();
});
}
@override
Widget build(BuildContext context) {
var settings = Provider.of<Settings>(context);
Widget body = editingMode
? widget.body
: NoteViewer(
note: note,
parentFolder: widget.parentFolder,
);
return Scaffold(
body: GestureDetector(
@ -80,16 +126,18 @@ class _EditorScaffoldState extends State<EditorScaffold> {
editorState: widget.editorState,
noteModified: widget.noteModified,
extraButton: widget.extraButton,
allowEdits: editingMode,
onEditingModeChange: _switchMode,
),
),
Expanded(child: widget.body),
Expanded(child: body),
_AnimatedOpacityIgnorePointer(
visible: !hideUIElements,
child: EditorBottomBar(
editor: widget.editor,
editorState: widget.editorState,
parentFolder: widget.parentFolder,
allowEdits: widget.allowEdits,
allowEdits: editingMode,
zenMode: settings.zenMode,
onZenModeChanged: () {
setState(() {