app-starlock/lib/talk/startChart/start_chart_talk_status.dart
2024-12-12 10:28:03 +08:00

113 lines
3.3 KiB
Dart

// 定义视频对讲的状态枚举
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, // 等待接听
waitingData, // 等待数据
duringCall, // 通话中
rejected, // 被拒绝
uninitialized, // 未初始化
initializationCompleted, // 初始化完成
notTalkData, // 暂无通话数据
notTalkPing, // 暂无通话保持
error, // 错误状态
end, // 结束
}
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" 状态的逻辑
}
/// 设置状态为结束
void setEnd() {
_setStatus(TalkStatus.end);
// 可以在这里添加特定于 "end" 状态的逻辑
}
}