// 定义视频对讲的状态枚举 import 'package:star_lock/blue/io_tool/manager_event_bus.dart'; import 'package:star_lock/talk/startChart/events/talk_status_change_event.dart'; enum TalkStatus { waitingAnswer, // 等待接听 duringCall, // 通话中 rejected, // 被拒绝 uninitialized, // 未初始化 initializationCompleted, // 初始化完成 notTalkData, // 暂无通话数据 notTalkPing, // 暂无通话保持 error, // 错误状态 } class StartChartTalkStatus { // 私有字段,用于存储当前状态 TalkStatus _status = TalkStatus.uninitialized; // 私有化默认构造函数,防止外部创建实例 StartChartTalkStatus._( {TalkStatus initialStatus = TalkStatus.uninitialized}) { _status = initialStatus; } // 静态私有字段,存储唯一的实例 static final StartChartTalkStatus _instance = StartChartTalkStatus._(); // 静态工厂构造函数,返回唯一的实例 static StartChartTalkStatus get instance => _instance; // 获取当前状态的 getter 方法 TalkStatus get status => _status; // 通用的 set 方法(仍然保留) set status(TalkStatus newStatus) { _setStatus(newStatus); } // 内部方法,用于更新状态并触发状态变化事件 void _setStatus(TalkStatus newStatus) { if (_status == newStatus) return; // 如果状态没有变化,直接返回 print("对讲状态变化: ${_status.name} -> ${newStatus.name}"); // 更新状态 _status = newStatus; // 触发状态变化的事件或执行其他操作 _onStatusChanged(newStatus); } // 状态变化时的回调方法(可选) void _onStatusChanged(TalkStatus newStatus) { // 发布状态变化事件 EventBusManager().eventBus!.fire(TalkStatusChangeEvent(_status, newStatus)); } /// 设置状态为等待接听 void setWaitingAnswer() { _setStatus(TalkStatus.waitingAnswer); // 可以在这里添加特定于 "waitingAnswer" 状态的逻辑 } /// 设置状态为通话中 void setDuringCall() { _setStatus(TalkStatus.duringCall); // 可以在这里添加特定于 "duringCall" 状态的逻辑 } /// 设置状态为被拒绝 void setRejected() { _setStatus(TalkStatus.rejected); // 可以在这里添加特定于 "rejected" 状态的逻辑 } /// 设置状态为未初始化 void setUninitialized() { _setStatus(TalkStatus.uninitialized); // 可以在这里添加特定于 "uninitialized" 状态的逻辑 } /// 设置状态为初始化完成 void setInitializationCompleted() { _setStatus(TalkStatus.initializationCompleted); // 可以为 "initializationCompleted" 状态添加特定的逻辑 } /// 设置状态为暂无通话数据 void setNotTalkData() { _setStatus(TalkStatus.notTalkData); // 可以在这里添加特定于 "notTalkData" 状态的逻辑 } /// 设置状态为暂无通话保持 void setNotTalkPing() { _setStatus(TalkStatus.notTalkPing); // 可以在这里添加特定于 "notTalkPing" 状态的逻辑 } /// 设置状态为错误 void setError() { _setStatus(TalkStatus.error); // 可以在这里添加特定于 "error" 状态的逻辑 } }