import 'dart:async'; import 'dart:convert'; import 'dart:typed_data'; import 'package:dartssh2/dartssh2.dart'; import 'package:example/src/virtual_keyboard.dart'; import 'package:flutter/cupertino.dart'; import 'package:xterm/xterm.dart'; const host = 'localhost'; const port = 22; const username = ''; const password = ''; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return CupertinoApp( title: 'xterm.dart demo', home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key? key}) : super(key: key); @override // ignore: library_private_types_in_public_api _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State { late final terminal = Terminal(inputHandler: keyboard); final keyboard = VirtualKeyboard(defaultInputHandler); var title = host; @override void initState() { super.initState(); initTerminal(); } Future initTerminal() async { terminal.write('Connecting...\r\n'); final client = SSHClient( await SSHSocket.connect(host, port), username: username, onPasswordRequest: () => password, ); terminal.write('Connected\r\n'); final session = await client.shell( pty: SSHPtyConfig( width: terminal.viewWidth, height: terminal.viewHeight, ), ); terminal.buffer.clear(); terminal.buffer.setCursor(0, 0); terminal.onTitleChange = (title) { setState(() => this.title = title); }; terminal.onResize = (width, height, pixelWidth, pixelHeight) { session.resizeTerminal(width, height, pixelWidth, pixelHeight); }; terminal.onOutput = (data) { session.write(utf8.encode(data) as Uint8List); }; session.stdout .cast>() .transform(Utf8Decoder()) .listen(terminal.write); session.stderr .cast>() .transform(Utf8Decoder()) .listen(terminal.write); } @override Widget build(BuildContext context) { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text(title), backgroundColor: CupertinoTheme.of(context).barBackgroundColor.withOpacity(0.5), ), child: Column( children: [ Expanded( child: TerminalView(terminal), ), VirtualKeyboardView(keyboard), ], ), ); } }