opt.: editor (#755)

Fixes #753
This commit is contained in:
lollipopkit🏳️‍⚧️
2025-05-14 04:07:21 +08:00
committed by GitHub
parent d6cf33fb70
commit f6b3ec2a62

View File

@@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:code_text_field/code_text_field.dart';
import 'package:computer/computer.dart'; import 'package:computer/computer.dart';
import 'package:fl_lib/fl_lib.dart'; import 'package:fl_lib/fl_lib.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -14,6 +13,7 @@ import 'package:server_box/data/res/store.dart';
import 'package:server_box/data/store/setting.dart'; import 'package:server_box/data/store/setting.dart';
import 'package:server_box/view/widget/two_line_text.dart'; import 'package:server_box/view/widget/two_line_text.dart';
import 'package:re_editor/re_editor.dart';
enum EditorPageRetType { path, text } enum EditorPageRetType { path, text }
@@ -66,10 +66,8 @@ class EditorPage extends StatefulWidget {
class _EditorPageState extends State<EditorPage> { class _EditorPageState extends State<EditorPage> {
final _focusNode = FocusNode(); final _focusNode = FocusNode();
late CodeController _controller; late CodeLineEditingController _controller;
late Map<String, TextStyle> _codeTheme; late Map<String, TextStyle> _codeTheme;
late final _textStyle =
TextStyle(fontSize: Stores.setting.editorFontSize.fetch());
String? _langCode; String? _langCode;
var _saved = false; var _saved = false;
@@ -92,11 +90,9 @@ class _EditorPageState extends State<EditorPage> {
super.didChangeDependencies(); super.didChangeDependencies();
if (context.isDark) { if (context.isDark) {
_codeTheme = _codeTheme = themeMap[Stores.setting.editorDarkTheme.fetch()] ?? monokaiTheme;
themeMap[Stores.setting.editorDarkTheme.fetch()] ?? monokaiTheme;
} else { } else {
_codeTheme = _codeTheme = themeMap[Stores.setting.editorTheme.fetch()] ?? a11yLightTheme;
themeMap[Stores.setting.editorTheme.fetch()] ?? a11yLightTheme;
} }
_focusNode.requestFocus(); _focusNode.requestFocus();
} }
@@ -120,9 +116,7 @@ class _EditorPageState extends State<EditorPage> {
return CustomAppBar( return CustomAppBar(
centerTitle: true, centerTitle: true,
title: TwoLineText( title: TwoLineText(
up: widget.args?.title ?? up: widget.args?.title ?? widget.args?.path?.getFileName() ?? l10n.unknown,
widget.args?.path?.getFileName() ??
l10n.unknown,
down: l10n.editor, down: l10n.editor,
), ),
actions: [ actions: [
@@ -130,7 +124,6 @@ class _EditorPageState extends State<EditorPage> {
icon: const Icon(Icons.language), icon: const Icon(Icons.language),
tooltip: libL10n.language, tooltip: libL10n.language,
onSelected: (value) { onSelected: (value) {
_controller.language = Highlights.all[value];
_langCode = value; _langCode = value;
}, },
initialValue: _langCode, initialValue: _langCode,
@@ -153,20 +146,26 @@ class _EditorPageState extends State<EditorPage> {
} }
Widget _buildBody() { Widget _buildBody() {
return SingleChildScrollView( return Container(
child: CodeTheme( color: _EditorReTheme.getBackground(_codeTheme),
data: CodeThemeData(styles: _codeTheme), child: CodeEditor(
child: CodeField(
wrap: Stores.setting.editorSoftWrap.fetch(),
focusNode: _focusNode,
controller: _controller, controller: _controller,
textStyle: _textStyle, wordWrap: Stores.setting.editorSoftWrap.fetch(),
lineNumberStyle: const LineNumberStyle( focusNode: _focusNode,
width: 47, indicatorBuilder: (context, editingController, chunkController, notifier) {
margin: 7, return Row(
children: [
DefaultCodeLineNumber(
controller: editingController,
notifier: notifier,
), ),
],
);
},
// findBuilder: (context, controller, readOnly) => CodeFindPanelView(controller: controller, readOnly: readOnly),
// toolbarController: const ContextMenuControllerImpl(),
), ),
)); );
} }
} }
@@ -174,13 +173,9 @@ extension on _EditorPageState {
Future<void> _init() async { Future<void> _init() async {
/// Higher priority than [path] /// Higher priority than [path]
if (Stores.setting.editorHighlight.fetch()) { if (Stores.setting.editorHighlight.fetch()) {
_langCode = _langCode = widget.args?.langCode ?? Highlights.getCode(widget.args?.path);
widget.args?.langCode ?? Highlights.getCode(widget.args?.path);
} }
_controller = CodeController( _controller = CodeLineEditingController();
language: Highlights.all[_langCode],
);
if (_langCode == null) { if (_langCode == null) {
_setupCtrl(); _setupCtrl();
} else { } else {
@@ -243,3 +238,13 @@ extension on _EditorPageState {
context.pop(); context.pop();
} }
} }
class _EditorReTheme {
static Color? getBackground(Map<String, TextStyle> codeTheme) {
return codeTheme['root']?.backgroundColor;
}
// static TextStyle? getTextStyle(Map<String, TextStyle> codeTheme) {
// return codeTheme['root'];
// }
}