73 lines
1.8 KiB
Dart
73 lines
1.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_code_editor/flutter_code_editor.dart';
|
|
import 'package:flutter_highlight/themes/monokai-sublime.dart';
|
|
import 'package:highlight/languages/markdown.dart';
|
|
import 'dart:io';
|
|
|
|
class NoteEditorScreen extends StatefulWidget {
|
|
final File note;
|
|
final bool isDarkMode;
|
|
|
|
NoteEditorScreen({required this.note, required this.isDarkMode});
|
|
|
|
@override
|
|
_NoteEditorScreenState createState() => _NoteEditorScreenState();
|
|
}
|
|
|
|
class _NoteEditorScreenState extends State<NoteEditorScreen> {
|
|
late CodeController _controller;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_loadNoteContent();
|
|
}
|
|
|
|
Future<void> _loadNoteContent() async {
|
|
final content = await widget.note.readAsString();
|
|
setState(() {
|
|
_controller = CodeController(
|
|
text: content,
|
|
language: markdown,
|
|
);
|
|
_controller.addListener(_saveNote);
|
|
_controller.popupController.enabled = false;
|
|
});
|
|
}
|
|
|
|
Future<void> _saveNote() async {
|
|
await widget.note.writeAsString(_controller.text);
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_controller.removeListener(_saveNote);
|
|
_controller.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text(widget.note.uri.pathSegments.last.replaceAll('.md', '')),
|
|
),
|
|
body: _controller == null
|
|
? Center(child: CircularProgressIndicator())
|
|
: Padding(
|
|
padding: const EdgeInsets.all(16.0),
|
|
child: CodeTheme(
|
|
data: CodeThemeData(styles: monokaiSublimeTheme),
|
|
child: CodeField(
|
|
gutterStyle: GutterStyle.none,
|
|
controller: _controller,
|
|
expands: true,
|
|
textStyle: TextStyle(
|
|
fontSize: 14.0,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|