import 'dart:convert'; import 'package:dartssh/client.dart'; import 'package:flutter/material.dart'; import 'package:xterm/flutter.dart'; import 'package:xterm/xterm.dart'; const host = 'ssh://localhost:22'; const username = 'xuty'; const password = '123123'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'xterm.dart demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State { Terminal terminal; SSHClient client; @override void initState() { super.initState(); terminal = Terminal(onInput: onInput); connect(); } void connect() { terminal.write('connecting $host...'); client = SSHClient( hostport: Uri.parse(host), login: username, print: print, termWidth: 80, termHeight: 25, termvar: 'xterm-256color', getPassword: () => utf8.encode(password), response: (transport, data) { terminal.write(data); }, success: () { terminal.write('connected.\n'); }, disconnected: () { terminal.write('disconnected.'); }, ); } void onInput(String input) { client?.sendChannelData(utf8.encode(input)); } @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: TerminalView( terminal: terminal, onResize: (width, height) { client?.setTerminalWindowSize(width, height); }, ), ), ); } }