This commit is contained in:
lollipopkit
2023-05-28 15:03:02 +08:00
parent ae822de737
commit 68c1fe4943
11 changed files with 294 additions and 140 deletions

66
lib/view/page/editor.dart Normal file
View File

@@ -0,0 +1,66 @@
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/java.dart';
import 'package:toolbox/core/extension/navigator.dart';
class EditorPage extends StatefulWidget {
final String? initCode;
const EditorPage({Key? key, this.initCode}) : super(key: key);
@override
_EditorPageState createState() => _EditorPageState();
}
class _EditorPageState extends State<EditorPage> {
late CodeController _controller;
late final _focusNode = FocusNode();
@override
void initState() {
super.initState();
_focusNode.requestFocus();
_controller = CodeController(
text: widget.initCode,
language: java,
analyzer: const DefaultLocalAnalyzer(),
);
}
@override
void dispose() {
_controller.dispose();
_focusNode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: monokaiSublimeTheme['root']!.backgroundColor,
appBar: AppBar(
title: const Text('Editor'),
actions: [
IconButton(
icon: const Icon(Icons.done),
onPressed: () {
context.pop(_controller.fullText);
},
),
],
),
body: CodeTheme(
data: CodeThemeData(styles: monokaiSublimeTheme),
child: SingleChildScrollView(
child: CodeField(
controller: _controller,
gutterStyle: const GutterStyle(
width: 37,
showLineNumbers: false,
),
),
),
),
);
}
}

View File

@@ -3,6 +3,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/core/extension/navigator.dart';
import 'package:toolbox/view/page/editor.dart';
import '../../../core/extension/numx.dart';
import '../../../core/extension/stringx.dart';
@@ -172,6 +173,21 @@ class _SFTPDownloadedPageState extends State<SFTPDownloadedPage> {
shareFiles(context, [file.absolute.path]);
},
),
ListTile(
leading: const Icon(Icons.edit),
title: Text(_s.edit),
onTap: () async {
context.pop();
final stat = await file.stat();
if (stat.size > 1024 * 1024) {
showRoundDialog(context: context, child: Text('too big'));
return;
}
final f = await File(file.absolute.path).readAsString();
AppRoute(EditorPage(initCode: f), 'sftp dled editor')
.go(context);
},
)
],
),
actions: [

View File

@@ -10,7 +10,6 @@ import 'package:toolbox/core/extension/navigator.dart';
import 'package:xterm/xterm.dart';
import '../../core/utils/platform.dart';
import '../../data/model/ssh/terminal_color.dart';
import '../../core/utils/misc.dart';
import '../../core/utils/ui.dart';
import '../../core/utils/server.dart';
@@ -44,7 +43,6 @@ class _SSHPageState extends State<SSHPage> {
late TextStyle _menuTextStyle;
late S _s;
late TerminalStyle _terminalStyle;
late TerminalUITheme _termUITheme;
late TerminalTheme _terminalTheme;
var _isDark = false;
@@ -68,8 +66,7 @@ class _SSHPageState extends State<SSHPage> {
_media = MediaQuery.of(context);
_menuTextStyle = TextStyle(color: contentColor.resolve(context));
_s = S.of(context)!;
_termUITheme = _isDark ? termDarkTheme : termLightTheme;
_terminalTheme = _termUITheme.toTerminalTheme(MacOSTerminalColor());
_terminalTheme = _isDark ? termDarkTheme : termLightTheme;
}
@override
@@ -81,7 +78,7 @@ class _SSHPageState extends State<SSHPage> {
@override
Widget build(BuildContext context) {
Widget child = Scaffold(
backgroundColor: _termUITheme.background,
backgroundColor: _terminalTheme.background,
body: _buildBody(),
bottomNavigationBar: _buildBottom(),
);
@@ -120,7 +117,7 @@ class _SSHPageState extends State<SSHPage> {
duration: const Duration(milliseconds: 23),
curve: Curves.fastOutSlowIn,
child: Container(
color: _termUITheme.background,
color: _terminalTheme.background,
height: _virtualKeyboardHeight,
child: Consumer<VirtualKeyboard>(
builder: (_, __, ___) => _buildVirtualKey(),