ssh.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import 'dart:convert';
  2. import 'package:dartssh/client.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:xterm/flutter.dart';
  5. import 'package:xterm/xterm.dart';
  6. const host = 'ssh://localhost:22';
  7. const username = 'xuty';
  8. const password = '123123';
  9. void main() {
  10. runApp(MyApp());
  11. }
  12. class MyApp extends StatelessWidget {
  13. @override
  14. Widget build(BuildContext context) {
  15. return MaterialApp(
  16. title: 'xterm.dart demo',
  17. theme: ThemeData(
  18. primarySwatch: Colors.blue,
  19. visualDensity: VisualDensity.adaptivePlatformDensity,
  20. ),
  21. home: MyHomePage(),
  22. );
  23. }
  24. }
  25. class MyHomePage extends StatefulWidget {
  26. MyHomePage({Key key}) : super(key: key);
  27. @override
  28. _MyHomePageState createState() => _MyHomePageState();
  29. }
  30. class _MyHomePageState extends State<MyHomePage> {
  31. Terminal terminal;
  32. SSHClient client;
  33. @override
  34. void initState() {
  35. super.initState();
  36. terminal = Terminal(onInput: onInput);
  37. connect();
  38. }
  39. void connect() {
  40. terminal.write('connecting $host...');
  41. client = SSHClient(
  42. hostport: Uri.parse(host),
  43. login: username,
  44. print: print,
  45. termWidth: 80,
  46. termHeight: 25,
  47. termvar: 'xterm-256color',
  48. getPassword: () => utf8.encode(password),
  49. response: (transport, data) {
  50. terminal.write(data);
  51. },
  52. success: () {
  53. terminal.write('connected.\n');
  54. },
  55. disconnected: () {
  56. terminal.write('disconnected.');
  57. },
  58. );
  59. }
  60. void onInput(String input) {
  61. client?.sendChannelData(utf8.encode(input));
  62. }
  63. @override
  64. Widget build(BuildContext context) {
  65. return Scaffold(
  66. body: SafeArea(
  67. child: TerminalView(
  68. terminal: terminal,
  69. onResize: (width, height) {
  70. client?.setTerminalWindowSize(width, height);
  71. },
  72. ),
  73. ),
  74. );
  75. }
  76. }