TerminalStudio / xterm.dart

💻 xterm.dart is a fast and fully-featured terminal emulator for Flutter, with support for mobile and desktop platforms.
https://pub.dev/packages/xterm
MIT License
506 stars 97 forks source link

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

Open connectTimeout opened 1 year ago

connectTimeout commented 1 year ago

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'); } }

itzhoujun commented 1 year ago

每次输入都是触发terminal.output

itzhoujun commented 1 year ago

为啥要用websocket?

connectTimeout commented 1 year ago

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

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

connectTimeout commented 1 year ago

为啥用websocket?

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

connectTimeout commented 1 year ago

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