feat(remote): 修复键盘输入映射并重构连接流程
- Android端注入按键时显式设置SOURCE_KEYBOARD,修复IME丢弃事件导致输入框无法输入文字的问题 - Flutter端新增Flutter逻辑键到Android keyCode的转换映射,避免功能键误触发 - 重构RemoteController,分离信令连接与远程控制逻辑,支持设备列表选择与配对码兑换 - AuthRepository接口新增getBindings、getOnlineDevices、redeemPairingCode方法 - DioAuthRepository实现401自动刷新token重试机制 - ConnectionSessionState扩展设备列表、在线状态、配对码等状态字段
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'binding_device.g.dart';
|
||||
|
||||
/// 主控端已绑定的被控设备(对应服务端 DeviceBinding / 在线设备列表)。
|
||||
///
|
||||
/// 字段对齐 [WebRTCSignalServer] 的 [DeviceBinding] 与 OnDeviceDto,
|
||||
/// 以及 Android 控制端的 [BindingItem],供用户在列表中选取并连接。
|
||||
@JsonSerializable(fieldRename: FieldRename.snake)
|
||||
class BindingDevice {
|
||||
const BindingDevice({
|
||||
required this.deviceUid,
|
||||
this.name,
|
||||
this.online = false,
|
||||
this.authType = 'NONE',
|
||||
this.lastSeen,
|
||||
});
|
||||
|
||||
/// 被控端设备唯一标识(连接信令时使用)。
|
||||
///
|
||||
/// 服务端 [DeviceBinding.deviceUid](必返回,缺失时兜底空串以保证列表可用)。
|
||||
@JsonKey(name: 'deviceUid')
|
||||
final String deviceUid;
|
||||
|
||||
/// 设备展示名称,对应服务端 [DeviceBinding.alias],可为 null。
|
||||
///
|
||||
/// 未设置别名时回退为设备标识,避免空名称影响展示与选择。
|
||||
@JsonKey(name: 'alias')
|
||||
final String? name;
|
||||
|
||||
/// 是否在线(信令网络中活跃)。
|
||||
final bool online;
|
||||
|
||||
/// 连接鉴权方式:NONE / PASSWORD / CODE。
|
||||
///
|
||||
/// 服务端字段为 [DeviceBinding.authType],缺失时默认 NONE。
|
||||
@JsonKey(name: 'authType', defaultValue: 'NONE')
|
||||
final String authType;
|
||||
|
||||
/// 最近一次在线时间戳(毫秒)。
|
||||
@JsonKey(name: 'lastSeen')
|
||||
final int? lastSeen;
|
||||
|
||||
factory BindingDevice.fromJson(Map<String, dynamic> json) =>
|
||||
_$BindingDeviceFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$BindingDeviceToJson(this);
|
||||
|
||||
BindingDevice copyWith({
|
||||
String? deviceUid,
|
||||
String? name,
|
||||
bool? online,
|
||||
String? authType,
|
||||
int? lastSeen,
|
||||
}) =>
|
||||
BindingDevice(
|
||||
deviceUid: deviceUid ?? this.deviceUid,
|
||||
name: name ?? this.name,
|
||||
online: online ?? this.online,
|
||||
authType: authType ?? this.authType,
|
||||
lastSeen: lastSeen ?? this.lastSeen,
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user