From f6b3ec2a6263c0a3aa42ab3fa19dae47ee4b7346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Wed, 14 May 2025 04:07:21 +0800 Subject: [PATCH] opt.: editor (#755) Fixes #753 --- lib/view/page/editor.dart | 65 +++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/lib/view/page/editor.dart b/lib/view/page/editor.dart index bf6eebda..bac20568 100644 --- a/lib/view/page/editor.dart +++ b/lib/view/page/editor.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:io'; -import 'package:code_text_field/code_text_field.dart'; import 'package:computer/computer.dart'; import 'package:fl_lib/fl_lib.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/view/widget/two_line_text.dart'; +import 'package:re_editor/re_editor.dart'; enum EditorPageRetType { path, text } @@ -66,10 +66,8 @@ class EditorPage extends StatefulWidget { class _EditorPageState extends State { final _focusNode = FocusNode(); - late CodeController _controller; + late CodeLineEditingController _controller; late Map _codeTheme; - late final _textStyle = - TextStyle(fontSize: Stores.setting.editorFontSize.fetch()); String? _langCode; var _saved = false; @@ -92,11 +90,9 @@ class _EditorPageState extends State { super.didChangeDependencies(); if (context.isDark) { - _codeTheme = - themeMap[Stores.setting.editorDarkTheme.fetch()] ?? monokaiTheme; + _codeTheme = themeMap[Stores.setting.editorDarkTheme.fetch()] ?? monokaiTheme; } else { - _codeTheme = - themeMap[Stores.setting.editorTheme.fetch()] ?? a11yLightTheme; + _codeTheme = themeMap[Stores.setting.editorTheme.fetch()] ?? a11yLightTheme; } _focusNode.requestFocus(); } @@ -120,9 +116,7 @@ class _EditorPageState extends State { return CustomAppBar( centerTitle: true, title: TwoLineText( - up: widget.args?.title ?? - widget.args?.path?.getFileName() ?? - l10n.unknown, + up: widget.args?.title ?? widget.args?.path?.getFileName() ?? l10n.unknown, down: l10n.editor, ), actions: [ @@ -130,7 +124,6 @@ class _EditorPageState extends State { icon: const Icon(Icons.language), tooltip: libL10n.language, onSelected: (value) { - _controller.language = Highlights.all[value]; _langCode = value; }, initialValue: _langCode, @@ -153,20 +146,26 @@ class _EditorPageState extends State { } Widget _buildBody() { - return SingleChildScrollView( - child: CodeTheme( - data: CodeThemeData(styles: _codeTheme), - child: CodeField( - wrap: Stores.setting.editorSoftWrap.fetch(), - focusNode: _focusNode, + return Container( + color: _EditorReTheme.getBackground(_codeTheme), + child: CodeEditor( controller: _controller, - textStyle: _textStyle, - lineNumberStyle: const LineNumberStyle( - width: 47, - margin: 7, - ), + wordWrap: Stores.setting.editorSoftWrap.fetch(), + focusNode: _focusNode, + indicatorBuilder: (context, editingController, chunkController, notifier) { + 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 _init() async { /// Higher priority than [path] if (Stores.setting.editorHighlight.fetch()) { - _langCode = - widget.args?.langCode ?? Highlights.getCode(widget.args?.path); + _langCode = widget.args?.langCode ?? Highlights.getCode(widget.args?.path); } - _controller = CodeController( - language: Highlights.all[_langCode], - ); - + _controller = CodeLineEditingController(); if (_langCode == null) { _setupCtrl(); } else { @@ -243,3 +238,13 @@ extension on _EditorPageState { context.pop(); } } + +class _EditorReTheme { + static Color? getBackground(Map codeTheme) { + return codeTheme['root']?.backgroundColor; + } + + // static TextStyle? getTextStyle(Map codeTheme) { + // return codeTheme['root']; + // } +}