app-starlock/lib/talk/starChart/status/star_chart_talk_status.dart

72 lines
2.3 KiB
Dart

import 'dart:async';
import 'package:star_lock/blue/io_tool/manager_event_bus.dart';
import 'package:star_lock/talk/starChart/constant/talk_status.dart';
class StartChartTalkStatus {
// 私有字段,用于存储当前状态
TalkStatus _status = TalkStatus.uninitialized;
// 私有化默认构造函数,防止外部创建实例
StartChartTalkStatus._();
// 静态私有字段,存储唯一的实例
static final StartChartTalkStatus _instance = StartChartTalkStatus._();
// 提供一个静态方法来获取单例实例
static StartChartTalkStatus get instance => _instance;
// 创建一个 StreamController 用于状态变化
final StreamController<TalkStatus> _statusStreamController =
StreamController<TalkStatus>.broadcast();
// 提供一个方法来获取 Stream
Stream<TalkStatus> get statusStream => _statusStreamController.stream;
// 获取当前状态的 getter 方法
TalkStatus get status => _status;
// 内部方法,用于更新状态并触发状态变化事件
void _setStatus(TalkStatus newStatus) {
if (_status == newStatus) return; // 如果状态没有变化,直接返回
print("对讲状态变化: ${_status} -> ${newStatus}");
// 更新状态
_status = newStatus;
// 触发状态变化事件
_statusStreamController.add(_status);
}
// 提供状态设置方法
void setPassiveCallWaitingAnswer() => _setStatus(TalkStatus.passiveCallWaitingAnswer);
void setProactivelyCallWaitingAnswer() => _setStatus(TalkStatus.proactivelyCallWaitingAnswer);
void setWaitingData() => _setStatus(TalkStatus.waitingData);
// void setDuringCall() => _setStatus(TalkStatus.duringCall);
void setRejected() => _setStatus(TalkStatus.rejected);
void setUninitialized() => _setStatus(TalkStatus.uninitialized);
void setInitializationCompleted() =>
_setStatus(TalkStatus.initializationCompleted);
void setNotTalkData() => _setStatus(TalkStatus.notTalkData);
void setNotTalkPing() => _setStatus(TalkStatus.notTalkPing);
void setError() => _setStatus(TalkStatus.error);
void setHangingUpDuring() => _setStatus(TalkStatus.hangingUpDuring);
void setAnsweredSuccessfully() => _setStatus(TalkStatus.answeredSuccessfully);
void setEnd() => _setStatus(TalkStatus.end);
// 提供一个方法来关闭 StreamController
void dispose() {
_statusStreamController.close();
}
}