opt. for ssh

This commit is contained in:
lollipopkit
2023-01-28 13:57:35 +08:00
parent 9608c9139c
commit 587e0a4640
13 changed files with 167 additions and 71 deletions

View File

@@ -13,6 +13,7 @@ import 'package:toolbox/data/provider/server.dart';
import 'package:toolbox/data/provider/snippet.dart';
import 'package:toolbox/data/res/color.dart';
import 'package:toolbox/data/res/font_style.dart';
import 'package:toolbox/data/res/url.dart';
import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/locator.dart';
import 'package:toolbox/view/page/pkg.dart';
@@ -25,6 +26,8 @@ import 'package:toolbox/view/page/ssh.dart';
import 'package:toolbox/view/widget/picker.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '../../widget/url_text.dart';
class ServerPage extends StatefulWidget {
const ServerPage({Key? key}) : super(key: key);
@@ -203,7 +206,22 @@ class _ServerPageState extends State<ServerPage>
Icons.terminal,
size: 21,
),
onTap: () => AppRoute(SSHPage(spi: spi), 'ssh page').go(context),
onTap: () => showRoundDialog(
context,
_s.attention,
UrlText(
text: _s.sshTip(issueUrl),
replace: 'Github Issue',
),
[
TextButton(
onPressed: () {
Navigator.of(context).pop();
AppRoute(SSHPage(spi: spi), 'ssh page').go(context);
},
child: Text(_s.ok),
)
]),
);
}

View File

@@ -3,10 +3,13 @@ import 'dart:convert';
import 'package:dartssh2/dartssh2.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:toolbox/data/res/font_style.dart';
import 'package:xterm/xterm.dart';
import '../../core/utils.dart';
import '../../data/model/server/server_private_info.dart';
import '../../data/provider/server.dart';
import '../../data/res/terminal_theme.dart';
import '../../locator.dart';
import '../widget/virtual_keyboard.dart';
@@ -20,10 +23,11 @@ class SSHPage extends StatefulWidget {
class _SSHPageState extends State<SSHPage> {
late final terminal = Terminal(inputHandler: keyboard);
late final SSHSession session;
final keyboard = VirtualKeyboard(defaultInputHandler);
var title = '';
var isDark = false;
@override
void initState() {
@@ -31,6 +35,18 @@ class _SSHPageState extends State<SSHPage> {
initTerminal();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
isDark = isDarkMode(context);
}
@override
void dispose() {
session.close();
super.dispose();
}
Future<void> initTerminal() async {
terminal.write('Connecting...\r\n');
@@ -46,7 +62,7 @@ class _SSHPageState extends State<SSHPage> {
terminal.write('Connected\r\n');
final session = await client.shell(
session = await client.shell(
pty: SSHPtyConfig(
width: terminal.viewWidth,
height: terminal.viewHeight,
@@ -83,14 +99,17 @@ class _SSHPageState extends State<SSHPage> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(title),
backgroundColor:
Theme.of(context).appBarTheme.backgroundColor?.withOpacity(0.5),
title: Text(title, style: textSize18),
),
body: Column(
children: [
Expanded(
child: TerminalView(terminal, keyboardType: TextInputType.none),
child: TerminalView(
terminal,
keyboardType: TextInputType.visiblePassword,
theme: isDark ? termDarkTheme : termLightTheme,
keyboardAppearance: isDark ? Brightness.dark : Brightness.light,
),
),
VirtualKeyboardView(keyboard),
],