TerminalStudio / xterm.dart

💻 xterm.dart is a fast and fully-featured terminal emulator for Flutter, with support for mobile and desktop platforms.

Home Page:https://pub.dev/packages/xterm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

求大佬出一个WebSocketChannel+xterm的例子!

connectTimeout opened this issue · comments

StreamBuilder(
stream: bloc.channel?.stream,
builder: (context, snapshot) {
String? aa;
if (snapshot.data != null) {
Uint8List fileBytes =
Uint8List.fromList(snapshot.data);
aa = utf8.decode(fileBytes);
}
bloc.snapshot(aa);
return Expanded(
child: TerminalView(
bloc.terminal,
controller: bloc.terminalController,
padding: const EdgeInsets.all(8),
theme: TerminalThemes.defaultTheme,
autofocus: true,
backgroundOpacity: 1,
onSecondaryTapDown: (details, offset) async {
final selection =
bloc.terminalController.selection;
if (selection != null) {
final text = bloc.terminal.buffer
.getText(selection);
bloc.terminalController.clearSelection();
await Clipboard.setData(
ClipboardData(text: text));
} else {
final data =
await Clipboard.getData('text/plain');
final text = data?.text;
if (text != null) {
bloc.terminal.paste(text);
}
}
},
),
);
},
),
不知道为啥我输入一个它就会发送消息,
业务代码
final terminal = Terminal(
maxLines: 10000,
platform: TerminalTargetPlatform.web,
inputHandler: defaultInputHandler,
);
void sendMessage(String name) async {
Uint8List by = Uint8List.fromList(utf8.encode(name));
terminal.write(name);
if (wsTEC.text.isNotEmpty) {
channel?.sink.add(by);
}
await onInit();
pagesScope.update();
}

@OverRide
Future onInit() async {
channel = WebSocketChannel.connect(
Uri.parse("${RequestConfig.wshost}/terminals?hostId=$hostId"),
);
terminal.onOutput = (data) {
Uint8List by = Uint8List.fromList(utf8.encode(data));
if (data.isNotEmpty) {
channel?.sink.add(by);
}
sendMessage(data);
};
return "1";
}

void snapshot(String? value) {
if (value == null) {
terminal.write("链接失败!!!");
}
{
terminal.write('\r$value');
}
}

每次输入都是触发terminal.output

为啥要用websocket?

旁边的输入都是触发terminal.output

我想输入完成后回车发送,不知道应该怎么去解决

为啥用websocket?

我只有一个ws的地址,所以选择了websocket。最重要的是开发的是flutter web

@itzhoujun
image
大佬你看看这啥问题啊,以前用得好好得啊,今天不行了