72 lines
2.3 KiB
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();
|
|
}
|
|
}
|