Flutter 在Dart中解码SSH shell的输出

Flutter 在Dart中解码SSH shell的输出,flutter,dart,ssh,Flutter,Dart,Ssh,我用dart(flatter)编写了这段代码,它使用这个包实现了一个SSH客户机 导入“包装:颤振/材料.省道”; 导入“package:ssh/ssh.dart”; void main()=>runApp(Home()); 类Home扩展了StatefulWidget{ @凌驾 _HomeState createState()=>\u HomeState(); } 类(HomeState扩展状态){ 串出“”; void send()异步{ 设置状态(){ out=“”; 打印(输出代码单位)

我用dart(flatter)编写了这段代码,它使用这个包实现了一个SSH客户机

导入“包装:颤振/材料.省道”;
导入“package:ssh/ssh.dart”;
void main()=>runApp(Home());
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
串出“”;
void send()异步{
设置状态(){
out=“”;
打印(输出代码单位);
});
SSHClient客户端=新的SSHClient(
主持人:“192.168.10.88”,
港口:22,
用户名:“耶稣”,
密码工作:“*******”,
);
等待client.connect();
等待客户端启动shell(
字体:“香草”,
回调:(动态res){
设置状态(){
out+=res;
打印(res.codeUnits);
/*
打印输出:
[27, 91, 50, 74, 27, 91, 109, 27, 91, 72, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 87, 105, 110, 100, 111, 119, 115, 32, 91, 86, 101, 114, 115, 105, 111, 110, 32, 49, 48, 46, 48, 46, 49, 57, 48, 52, 49, 46, 51, 56, 56, 93, 27, 93, 48, 59, 67, 58, 92, 87, 73, 78, 68, 79, 87, 83, 92, 115, 121, 115, 116, 101, 109, 51, 50, 92, 99, 111, 110, 104, 111, 115, 116, 46, 101, 120, 101, 7, 27, 91, 63, 50, 53, 104, 10]
[40, 99, 41, 32, 50, 48, 50, 48, 32, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, 46, 32, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115, 101, 114, 118, 101, 100, 46, 10]
[27, 91, 53, 50, 88, 10]
*/
});
},
);
//等待客户端。WriteShell(“cd\r\n”);
推迟(
常数持续时间(秒:5),
()async=>wait client.closeShell(),
);
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(标题:文本(“SSH”),
主体:容器(
子:列(
儿童:[
扁平按钮(
子项:文本(“发送命令”),
按:发送,
),
文本(输出),
],
),
),
),
);
}
}
但是,当我运行程序并启动客户机时,模拟shell的输出是垃圾,就像这样

我想我需要做一些解码来解释转义字符“27”,但我不知道怎么做

import 'package:flutter/material.dart';
import 'package:ssh/ssh.dart';

void main() => runApp(Home());

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  String out = "";

  void send() async {
    setState(() {
      out = "";
      print(out.codeUnits);
    });

    SSHClient client = new SSHClient(
      host: "192.168.10.88",
      port: 22,
      username: "Jesus",
      passwordOrKey: "******",
    );

    await client.connect();
    await client.startShell(
      ptyType: "vanilla",
      callback: (dynamic res) {
        setState(() {
          out += res;
          print(res.codeUnits);
          /*
          print output:
          [27, 91, 50, 74, 27, 91, 109, 27, 91, 72, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 87, 105, 110, 100, 111, 119, 115, 32, 91, 86, 101, 114, 115, 105, 111, 110, 32, 49, 48, 46, 48, 46, 49, 57, 48, 52, 49, 46, 51, 56, 56, 93, 27, 93, 48, 59, 67, 58, 92, 87, 73, 78, 68, 79, 87, 83, 92, 115, 121, 115, 116, 101, 109, 51, 50, 92, 99, 111, 110, 104, 111, 115, 116, 46, 101, 120, 101, 7, 27, 91, 63, 50, 53, 104, 10]
          [40, 99, 41, 32, 50, 48, 50, 48, 32, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, 46, 32, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115, 101, 114, 118, 101, 100, 46, 10]
          [27, 91, 53, 50, 88, 10]
          */
        });
      },
    );

    //await client.writeToShell("cd\r\n");
    Future.delayed(
      const Duration(seconds: 5),
      () async => await client.closeShell(),
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("SSH")),
        body: Container(
          child: Column(
            children: <Widget>[
              FlatButton(
                child: Text("Send Command"),
                onPressed: send,
              ),
              Text(out),
            ],
          ),
        ),
      ),
    );
  }
}