mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-18 07:44:26 +01:00
opt. for ssh
This commit is contained in:
@@ -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),
|
||||
)
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user