解决收到视频数据后加载刷新白屏问题
This commit is contained in:
parent
c87d2f96b0
commit
962c7cfded
@ -1,6 +1,7 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
import '../../../../tools/baseGetXController.dart';
|
||||
import '../../../../tools/eventBusEventManage.dart';
|
||||
import 'lockMonitoring_state.dart';
|
||||
@ -12,8 +13,14 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
StreamSubscription? _getTVDataRefreshUIEvent;
|
||||
void _getTVDataRefreshUIAction() {
|
||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||
_getTVDataRefreshUIEvent = eventBus.on<GetTVDataRefreshUI>().listen((event) {
|
||||
state.listData.value = event.tvList;
|
||||
_getTVDataRefreshUIEvent =
|
||||
eventBus.on<GetTVDataRefreshUI>().listen((event) {
|
||||
if (event.tvList.isNotEmpty) {
|
||||
// 预加载图片数据
|
||||
Uint8List imageData = Uint8List.fromList(event.tvList);
|
||||
// 更新状态
|
||||
state.listData.value = imageData;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -30,7 +37,6 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
@ -39,5 +45,4 @@ class LockMonitoringLogic extends BaseGetXController {
|
||||
print("锁详情界面销毁了");
|
||||
_getTVDataRefreshUIEvent!.cancel();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,3 +1,5 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
@ -23,16 +25,13 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
|
||||
return SizedBox(
|
||||
width: 1.sw,
|
||||
height: 1.sh,
|
||||
// color: Colors.transparent,
|
||||
child: Stack(
|
||||
// alignment: Alignment.bottomCenter,
|
||||
children: [
|
||||
// state.listData.value.isEmpty ? Image.asset("images/icon_test20231113.png", width: 1.sw, height: 1.sh, fit: BoxFit.cover) :
|
||||
Obx(() =>
|
||||
state.listData.value.isEmpty
|
||||
? Container(color: Colors.red)
|
||||
Obx(() => state.listData.value.isEmpty
|
||||
? Container(color: Colors.transparent)
|
||||
: Image.memory(
|
||||
Uint8List.fromList(state.listData.value),
|
||||
state.listData.value,
|
||||
gaplessPlayback: true,
|
||||
width: 1.sw,
|
||||
height: 1.sh,
|
||||
fit: BoxFit.cover,
|
||||
|
||||
@ -5,7 +5,7 @@ import 'package:get/get.dart';
|
||||
class LockMonitoringState {
|
||||
var isOpenVoice = false.obs;
|
||||
|
||||
var listData = <int>[].obs;
|
||||
var listData = Uint8List(0).obs;
|
||||
|
||||
Uint8List imageData = Uint8List.fromList([
|
||||
255,
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
import 'dart:typed_data';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_sound/flutter_sound.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get/get_core/src/get_main.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
|
||||
import 'package:star_lock/talk/call/g711Decoder.dart';
|
||||
import 'package:star_lock/talk/call/iFrameInfo.dart';
|
||||
@ -21,7 +24,7 @@ class CallTalk {
|
||||
int status = 0; // 假设有这个成员变量
|
||||
IframeInfo? iframe; // 假设有这个成员变量
|
||||
var growableList;
|
||||
LockMonitoringPage callOut = const LockMonitoringPage();
|
||||
bool getFirstFrame = false; //是否得到了第一帧
|
||||
final FlutterSoundPlayer _audioPlayer = FlutterSoundPlayer();
|
||||
|
||||
CallTalk._init() {
|
||||
@ -107,6 +110,13 @@ class CallTalk {
|
||||
if (iframe!.bagNum == iframe!.bagReceive) {
|
||||
print(
|
||||
'播放第${iframe!.iframeIndex}帧 一帧图片的hexStringData: ${Uint8List.fromList(growableList)}');
|
||||
|
||||
//判断第一帧是否接收到
|
||||
if (iframe!.iframeIndex == 0) {
|
||||
getFirstFrame = true;
|
||||
eventBus.fire(GetFirstFrameGoPush(getFirstFrame));
|
||||
}
|
||||
|
||||
eventBus.fire(GetTVDataRefreshUI(growableList));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
@ -11,7 +9,6 @@ import 'udp_manage.dart';
|
||||
import 'udp_senderManage.dart';
|
||||
|
||||
class UdpHelp {
|
||||
|
||||
openUDP() async {
|
||||
// 从服务器获取ip跟端口
|
||||
var entity = await ApiRepository.to.getWifiLockServiceIpAndPort();
|
||||
@ -30,12 +27,14 @@ class UdpHelp{
|
||||
serversList.add(int.parse(element));
|
||||
}
|
||||
} else {
|
||||
List<InternetAddress> addresses = await InternetAddress.lookup(item.serviceIp!);
|
||||
List<InternetAddress> addresses =
|
||||
await InternetAddress.lookup(item.serviceIp!);
|
||||
var itemList = addresses.first.address.split(".");
|
||||
for (var element in itemList) {
|
||||
serversList.add(int.parse(element));
|
||||
}
|
||||
print('Resolved google.com to address: ${addresses.first.address} serversList:${serversList}');
|
||||
print(
|
||||
'Resolved google.com to address: ${addresses.first.address} serversList:${serversList}');
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,9 +50,7 @@ class UdpHelp{
|
||||
|
||||
Future<void> getWifiLockServiceIpAndPort() async {
|
||||
var entity = await ApiRepository.to.getWifiLockServiceIpAndPort();
|
||||
if(entity.errorCode! == 0){
|
||||
|
||||
}
|
||||
if (entity.errorCode! == 0) {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:fast_gbk/fast_gbk.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/tools/eventBusEventManage.dart';
|
||||
|
||||
import '../../appRouters.dart';
|
||||
import '../../main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
|
||||
@ -16,6 +16,7 @@ class UDPTalkClass{
|
||||
_manager ??= UDPTalkClass._init();
|
||||
return _manager!;
|
||||
}
|
||||
|
||||
factory UDPTalkClass() => _share();
|
||||
UDPTalkClass get manager => _share();
|
||||
|
||||
@ -65,17 +66,31 @@ class UDPTalkClass{
|
||||
data[8] = 9;
|
||||
UDPManage().sendData(data);
|
||||
});
|
||||
}
|
||||
|
||||
Get.toNamed(Routers.lockMonitoringPage, arguments: {
|
||||
"lockId": "111"
|
||||
// _getFirstFrameGoPushAction();
|
||||
Future.delayed(const Duration(seconds: 1), () {
|
||||
// 在这里写要延迟执行的代码
|
||||
Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"});
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 忙
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void _getFirstFrameGoPushAction() {
|
||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||
StreamSubscription _GetFirstFrameGoPushEvent =
|
||||
eventBus.on<GetFirstFrameGoPush>().listen((event) {
|
||||
if (event.isFirstFrame == true) {
|
||||
Future.delayed(const Duration(seconds: 1), () {
|
||||
// 在这里写要延迟执行的代码
|
||||
Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 判断是否是call的本人
|
||||
Future<bool> isCallMe(List<int>? data) async {
|
||||
final loginData = await Storage.getLoginData();
|
||||
|
||||
@ -61,3 +61,9 @@ class GetTVDataRefreshUI{
|
||||
List<int> tvList;
|
||||
GetTVDataRefreshUI(this.tvList);
|
||||
}
|
||||
|
||||
/// 获取到第一帧图片数据后跳转
|
||||
class GetFirstFrameGoPush {
|
||||
bool isFirstFrame;
|
||||
GetFirstFrameGoPush(this.isFirstFrame);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user