live_markdown_editor 0.8.0
live_markdown_editor: ^0.8.0 copied to clipboard
A source-preserving Flutter Markdown editor with raw, live, and read modes.
example/lib/main.dart
import 'package:flutter/widgets.dart';
import 'package:live_markdown_editor/live_markdown_editor.dart';
import 'demo_presets.dart';
import 'demo_settings.dart';
import 'demo_workspace.dart';
import 'editor_host.dart';
void main() => runApp(const EditorDemoApp());
/// A responsive package demonstration where the editor is always the primary
/// surface and every host preview edits the same canonical source.
final class EditorDemoApp extends StatefulWidget {
const EditorDemoApp({super.key});
@override
State<EditorDemoApp> createState() => _EditorDemoAppState();
}
final class _EditorDemoAppState extends State<EditorDemoApp> {
late final MarkdownEditorController _controller = MarkdownEditorController(
text: demoPresets.first.markdown,
);
DemoSettings _settings = const DemoSettings();
EditorHostKind _host = EditorHostKind.foundation;
var _document = 0;
var _mode = MarkdownEditorMode.live;
@override
void dispose() {
_controller.dispose();
super.dispose();
}
void _loadDocument(int index) {
setState(() {
_document = index;
_controller.text = demoPresets[index].markdown;
_controller.mode = _mode;
});
}
void _setMode(MarkdownEditorMode mode) {
setState(() => _mode = mode);
_controller.mode = mode;
}
void _onLink(String _) {}
@override
Widget build(BuildContext context) => Directionality(
textDirection: TextDirection.ltr,
child: DemoWorkspace(
controller: _controller,
settings: _settings,
selectedDocument: _document,
host: _host,
mode: _mode,
onDocumentChanged: _loadDocument,
onSettingsChanged: (settings) => setState(() => _settings = settings),
onHostChanged: (host) => setState(() => _host = host),
onModeChanged: _setMode,
onLinkTap: _onLink,
),
);
}