fix: wire backend<->engine data flow so content renders and input works
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_alacritty/flutter_alacritty.dart';
|
||||
|
||||
@@ -25,6 +28,8 @@ class _TerminalScreenState extends State<TerminalScreen> {
|
||||
final FocusNode _focus = FocusNode();
|
||||
|
||||
RttyPtyBackend? _backend;
|
||||
StreamSubscription<Uint8List>? _engineOutputSub;
|
||||
StreamSubscription<Uint8List>? _backendOutputSub;
|
||||
|
||||
final _host = TextEditingController(text: '127.0.0.1');
|
||||
final _port = TextEditingController(text: '8080');
|
||||
@@ -66,14 +71,22 @@ class _TerminalScreenState extends State<TerminalScreen> {
|
||||
_backend = RttyPtyBackend();
|
||||
});
|
||||
|
||||
_backend!.onStateChanged = (s) {
|
||||
final engine = _engine!;
|
||||
final backend = _backend!;
|
||||
|
||||
// 双向接线:backend 输出(服务端 ANSI)→ 引擎渲染;
|
||||
// 引擎输出(用户输入)→ backend 发回服务端写入远端 PTY。
|
||||
_engineOutputSub = engine.output.listen(backend.write);
|
||||
_backendOutputSub = backend.output.listen(engine.feed);
|
||||
|
||||
backend.onStateChanged = (s) {
|
||||
if (!mounted) return;
|
||||
setState(() => _state = s);
|
||||
if (s == ConnState.disconnected || s == ConnState.error) {
|
||||
_sessionId = null;
|
||||
}
|
||||
};
|
||||
_backend!.onReady = (id, cols, rows) {
|
||||
backend.onReady = (id, cols, rows) {
|
||||
if (!mounted) return;
|
||||
setState(() {
|
||||
_sessionId = id;
|
||||
@@ -82,12 +95,17 @@ class _TerminalScreenState extends State<TerminalScreen> {
|
||||
});
|
||||
};
|
||||
|
||||
await _backend!.connect(host: host, port: port, session: session);
|
||||
await backend.connect(host: host, port: port, session: session);
|
||||
}
|
||||
|
||||
void _disconnect() => _tearDownSession();
|
||||
|
||||
void _tearDownSession() {
|
||||
_engineOutputSub?.cancel();
|
||||
_engineOutputSub = null;
|
||||
_backendOutputSub?.cancel();
|
||||
_backendOutputSub = null;
|
||||
|
||||
final b = _backend;
|
||||
if (b != null) {
|
||||
b.onStateChanged = null;
|
||||
|
||||
Reference in New Issue
Block a user