app-starlock/lib/talk/starChart/views/talkView/talk_view_state.dart

99 lines
4.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:async';
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter_voice_processor/flutter_voice_processor.dart';
import 'package:get/get.dart';
import 'package:get/get_rx/get_rx.dart';
import 'package:get/get_rx/src/rx_types/rx_types.dart';
import 'package:get/state_manager.dart';
import 'package:network_info_plus/network_info_plus.dart';
import 'package:star_lock/talk/starChart/constant/talk_status.dart';
import 'package:star_lock/talk/starChart/handle/other/talk_data_repository.dart';
import 'package:star_lock/talk/starChart/proto/talk_data.pb.dart';
import 'package:star_lock/talk/starChart/status/star_chart_talk_status.dart';
import 'package:star_lock/translations/current_locale_tool.dart';
import '../../../../tools/storage.dart';
enum NetworkStatus {
normal, // 0
lagging, // 1
delayed, // 2
packetLoss // 3
}
class TalkViewState {
int udpSendDataFrameNumber = 0; // 帧序号
// var isSenderAudioData = false.obs;// 是否要发送音频数据
Future<String?> userMobileIP = NetworkInfo().getWifiIP();
Future<String?> userUid = Storage.getUid();
RxInt udpStatus =
0.obs; //0初始状态 1等待监视 2 3监视中 4呼叫成功 5主角通话中 6被叫通话 8被叫通话中 9长按说话
TextEditingController passwordTF = TextEditingController();
Rx<Uint8List> listData = Uint8List(0).obs; //得到的视频流字节数据
RxList<int> listAudioData = <int>[].obs; //得到的音频流字节数据
GlobalKey globalKey = GlobalKey();
Timer? oneMinuteTimeTimer; // 定时器超过60秒关闭当前界面
RxInt oneMinuteTime = 0.obs; // 定时器秒数
// 定时器如果发送了接听的命令 而没收到回复就每秒重复发送10次
late Timer answerTimer;
late Timer hangUpTimer;
late Timer openDoorTimer;
Timer? fpsTimer;
late AnimationController animationController;
late Timer autoBackTimer =
Timer(const Duration(seconds: 1), () {}); //发送30秒监视后自动返回
late Timer realTimePicTimer =
Timer(const Duration(seconds: 1), () {}); //监视命令定时器
RxInt elapsedSeconds = 0.obs;
// 星图对讲相关状态
List<TalkData> audioBuffer = <TalkData>[].obs;
List<TalkData> activeAudioBuffer = <TalkData>[].obs;
List<TalkData> activeVideoBuffer = <TalkData>[].obs;
List<TalkData> videoBuffer = <TalkData>[].obs;
List<TalkData> videoBuffer2 = <TalkData>[].obs;
RxBool isPlaying = false.obs; // 是否开始播放
Rx<TalkStatus> talkStatus = TalkStatus.none.obs; //星图对讲状态
// 获取 startChartTalkStatus 的唯一实例
final StartChartTalkStatus startChartTalkStatus =
StartChartTalkStatus.instance;
// 通话数据流的单例流数据处理类
final TalkDataRepository talkDataRepository = TalkDataRepository.instance;
RxInt lastFrameTimestamp = 0.obs; // 上一帧的时间戳,用来判断网络环境
Rx<NetworkStatus> networkStatus =
NetworkStatus.normal.obs; // 网络状态0-正常 1-网络卡顿 2-网络延迟 3-网络丢包
RxInt alertCount = 0.obs; // 网络状态提示计数器
RxInt maxAlertNumber = 3.obs; // 网络状态提示最大提示次数
RxBool isOpenVoice = true.obs; // 是否打开声音
RxBool isRecordingScreen = false.obs; // 是否录屏中
RxBool isRecordingAudio = false.obs; // 是否录音中
Rx<DateTime> startRecordingAudioTime = DateTime.now().obs; // 开始录音时间
Rx<DateTime> endRecordingAudioTime = DateTime.now().obs; // 结束录音时间
RxInt recordingAudioTime = 0.obs; // 录音时间持续时间
RxInt fps = 0.obs; // 添加 FPS 计数
late VoiceProcessor? voiceProcessor; // 音频处理器、录音
final int frameLength = 320; //录音视频帧长度为640
final int sampleRate = 8000; //录音频采样率为8000
List<int> recordingAudioAllFrames = <int>[]; // 录制音频的所有帧
List<int> lockRecordingAudioAllFrames = <int>[]; // 录制音频的所有帧
RxInt rotateAngle = 0.obs; // 旋转角度(以弧度为单位)
RxBool isLongPressing = false.obs; // 旋转角度(以弧度为单位)
RxBool hasAudioData = false.obs; // 是否有音频数据
RxInt lastAudioTimestamp = 0.obs; // 最后接收到的音频数据的时间戳
Rx<ui.Image?> currentImage = Rx<ui.Image?>(null);
RxString currentLanguage =
CurrentLocaleTool.getCurrentLocaleString().obs; // 当前选择语言
}