mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
@@ -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'];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user