解决收到视频数据后加载刷新白屏问题

This commit is contained in:
Daisy 2023-12-20 16:52:18 +08:00
parent c87d2f96b0
commit 962c7cfded
7 changed files with 132 additions and 100 deletions

View File

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/services.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../../tools/eventBusEventManage.dart'; import '../../../../tools/eventBusEventManage.dart';
import 'lockMonitoring_state.dart'; import 'lockMonitoring_state.dart';
@ -12,8 +13,14 @@ class LockMonitoringLogic extends BaseGetXController {
StreamSubscription? _getTVDataRefreshUIEvent; StreamSubscription? _getTVDataRefreshUIEvent;
void _getTVDataRefreshUIAction() { void _getTVDataRefreshUIAction() {
// eventBus // eventBus
_getTVDataRefreshUIEvent = eventBus.on<GetTVDataRefreshUI>().listen((event) { _getTVDataRefreshUIEvent =
state.listData.value = event.tvList; 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() { void onInit() {
// TODO: implement onInit // TODO: implement onInit
super.onInit(); super.onInit();
} }
@override @override
@ -39,5 +45,4 @@ class LockMonitoringLogic extends BaseGetXController {
print("锁详情界面销毁了"); print("锁详情界面销毁了");
_getTVDataRefreshUIEvent!.cancel(); _getTVDataRefreshUIEvent!.cancel();
} }
}
}

View File

@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -23,63 +25,60 @@ class _LockMonitoringPageState extends State<LockMonitoringPage> {
return SizedBox( return SizedBox(
width: 1.sw, width: 1.sw,
height: 1.sh, height: 1.sh,
// color: Colors.transparent,
child: Stack( child: Stack(
// alignment: Alignment.bottomCenter, children: [
children: [ Obx(() => state.listData.value.isEmpty
// state.listData.value.isEmpty ? Image.asset("images/icon_test20231113.png", width: 1.sw, height: 1.sh, fit: BoxFit.cover) : ? Container(color: Colors.transparent)
Obx(() => : Image.memory(
state.listData.value.isEmpty state.listData.value,
? Container(color: Colors.red) gaplessPlayback: true,
:Image.memory( width: 1.sw,
Uint8List.fromList(state.listData.value), height: 1.sh,
width: 1.sw, fit: BoxFit.cover,
height: 1.sh, )),
fit: BoxFit.cover, Positioned(
)), top: ScreenUtil().statusBarHeight + 30.h,
Positioned( child: Row(children: [
top: ScreenUtil().statusBarHeight + 30.h, SizedBox(width: 30.w),
child: Row(children: [ GestureDetector(
SizedBox(width: 30.w), onTap: () {
GestureDetector( Get.back();
onTap: () { },
Get.back(); child: Container(
}, decoration: BoxDecoration(
child: Container( color: Colors.white,
decoration: BoxDecoration( borderRadius: BorderRadius.circular(25.h)),
color: Colors.white, padding: EdgeInsets.all(10.w),
borderRadius: BorderRadius.circular(25.h)), child: Image(
padding: EdgeInsets.all(10.w), width: 40.w,
child: Image( height: 40.w,
width: 40.w, image: const AssetImage("images/icon_left_black.png"),
height: 40.w,
image: const AssetImage("images/icon_left_black.png"),
),
),
), ),
]), ),
), ),
Positioned( ]),
bottom: 10.w,
child: Container(
width: 1.sw - 30.w * 2,
// height: 300.h,
margin: EdgeInsets.all(30.w),
decoration: BoxDecoration(
color: const Color(0xC83C3F41),
borderRadius: BorderRadius.circular(20.h)),
child: Column(
children: [
SizedBox(height: 20.h),
bottomTopBtnWidget(),
SizedBox(height: 20.h),
bottomBottomBtnWidget(),
SizedBox(height: 20.h),
],
),
))
],
), ),
Positioned(
bottom: 10.w,
child: Container(
width: 1.sw - 30.w * 2,
// height: 300.h,
margin: EdgeInsets.all(30.w),
decoration: BoxDecoration(
color: const Color(0xC83C3F41),
borderRadius: BorderRadius.circular(20.h)),
child: Column(
children: [
SizedBox(height: 20.h),
bottomTopBtnWidget(),
SizedBox(height: 20.h),
bottomBottomBtnWidget(),
SizedBox(height: 20.h),
],
),
))
],
),
); );
} }

View File

@ -5,9 +5,9 @@ import 'package:get/get.dart';
class LockMonitoringState { class LockMonitoringState {
var isOpenVoice = false.obs; var isOpenVoice = false.obs;
var listData = <int>[].obs; var listData = Uint8List(0).obs;
Uint8List imageData = Uint8List.fromList([ Uint8List imageData = Uint8List.fromList([
255, 255,
216, 216,
255, 255,

View File

@ -1,6 +1,9 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_sound/flutter_sound.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/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
import 'package:star_lock/talk/call/g711Decoder.dart'; import 'package:star_lock/talk/call/g711Decoder.dart';
import 'package:star_lock/talk/call/iFrameInfo.dart'; import 'package:star_lock/talk/call/iFrameInfo.dart';
@ -21,7 +24,7 @@ class CallTalk {
int status = 0; // int status = 0; //
IframeInfo? iframe; // IframeInfo? iframe; //
var growableList; var growableList;
LockMonitoringPage callOut = const LockMonitoringPage(); bool getFirstFrame = false; //
final FlutterSoundPlayer _audioPlayer = FlutterSoundPlayer(); final FlutterSoundPlayer _audioPlayer = FlutterSoundPlayer();
CallTalk._init() { CallTalk._init() {
@ -107,6 +110,13 @@ class CallTalk {
if (iframe!.bagNum == iframe!.bagReceive) { if (iframe!.bagNum == iframe!.bagReceive) {
print( print(
'播放第${iframe!.iframeIndex}帧 一帧图片的hexStringData: ${Uint8List.fromList(growableList)}'); '播放第${iframe!.iframeIndex}帧 一帧图片的hexStringData: ${Uint8List.fromList(growableList)}');
//
if (iframe!.iframeIndex == 0) {
getFirstFrame = true;
eventBus.fire(GetFirstFrameGoPush(getFirstFrame));
}
eventBus.fire(GetTVDataRefreshUI(growableList)); eventBus.fire(GetTVDataRefreshUI(growableList));
} }
} }

View File

@ -1,5 +1,3 @@
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
@ -10,32 +8,33 @@ import '../../tools/storage.dart';
import 'udp_manage.dart'; import 'udp_manage.dart';
import 'udp_senderManage.dart'; import 'udp_senderManage.dart';
class UdpHelp{ class UdpHelp {
openUDP() async { openUDP() async {
// ip跟端口 // ip跟端口
var entity = await ApiRepository.to.getWifiLockServiceIpAndPort(); var entity = await ApiRepository.to.getWifiLockServiceIpAndPort();
if(entity.errorCode! == 0){ if (entity.errorCode! == 0) {
UDPManage(); UDPManage();
// UDPManage().initUdp(); // UDPManage().initUdp();
// UDPManage().host = entity.data!.serviceList![0].serviceIp!; // UDPManage().host = entity.data!.serviceList![0].serviceIp!;
// UDPManage().port = int.parse(entity.data!.serviceList![0].port!); // UDPManage().port = int.parse(entity.data!.serviceList![0].port!);
var serversList = <int>[]; var serversList = <int>[];
for(int i = 0; i<entity.data!.serviceList!.length; i++){ for (int i = 0; i < entity.data!.serviceList!.length; i++) {
var item = entity.data!.serviceList![i]; var item = entity.data!.serviceList![i];
if(item.serviceIp!.contains("192")){ if (item.serviceIp!.contains("192")) {
var itemList = item.serviceIp!.split("."); var itemList = item.serviceIp!.split(".");
for (var element in itemList) { for (var element in itemList) {
serversList.add(int.parse(element)); serversList.add(int.parse(element));
} }
}else{ } else {
List<InternetAddress> addresses = await InternetAddress.lookup(item.serviceIp!); List<InternetAddress> addresses =
await InternetAddress.lookup(item.serviceIp!);
var itemList = addresses.first.address.split("."); var itemList = addresses.first.address.split(".");
for (var element in itemList) { for (var element in itemList) {
serversList.add(int.parse(element)); 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 { Future<void> getWifiLockServiceIpAndPort() async {
var entity = await ApiRepository.to.getWifiLockServiceIpAndPort(); var entity = await ApiRepository.to.getWifiLockServiceIpAndPort();
if(entity.errorCode! == 0){ if (entity.errorCode! == 0) {}
}
} }
} }

View File

@ -1,28 +1,29 @@
import 'dart:async'; import 'dart:async';
import 'package:fast_gbk/fast_gbk.dart'; import 'package:fast_gbk/fast_gbk.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/tools/eventBusEventManage.dart';
import '../../appRouters.dart'; import '../../appRouters.dart';
import '../../main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart'; import '../../main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart';
import '../../tools/storage.dart'; import '../../tools/storage.dart';
import 'udp_manage.dart'; import 'udp_manage.dart';
class UDPTalkClass{ class UDPTalkClass {
static UDPTalkClass? _manager; static UDPTalkClass? _manager;
static UDPTalkClass _share(){ static UDPTalkClass _share() {
_manager ??= UDPTalkClass._init(); _manager ??= UDPTalkClass._init();
return _manager!; return _manager!;
} }
factory UDPTalkClass() => _share(); factory UDPTalkClass() => _share();
UDPTalkClass get manager => _share(); UDPTalkClass get manager => _share();
UDPTalkClass._init(); UDPTalkClass._init();
var status = 0;// 0 var status = 0; // 0
var remoteEquid;// var remoteEquid; //
late Timer timer; late Timer timer;
// 退 // 退
var isBeCall = false; var isBeCall = false;
@ -33,7 +34,7 @@ class UDPTalkClass{
// return; // return;
// } // }
if(status == 0){ if (status == 0) {
// //
// //
// [[Pub getApp] ring]; // [[Pub getApp] ring];
@ -65,22 +66,36 @@ class UDPTalkClass{
data[8] = 9; data[8] = 9;
UDPManage().sendData(data); UDPManage().sendData(data);
}); });
// _getFirstFrameGoPushAction();
Future.delayed(const Duration(seconds: 1), () {
//
Get.toNamed(Routers.lockMonitoringPage, arguments: {"lockId": "111"});
});
} }
} else {
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的本人 // call的本人
Future<bool> isCallMe(List<int>? data) async { Future<bool> isCallMe(List<int>? data) async {
final loginData = await Storage.getLoginData(); final loginData = await Storage.getLoginData();
print("getEquidFrombb(data, 1000):${getEquidFrombb(data, 12)}"); print("getEquidFrombb(data, 1000):${getEquidFrombb(data, 12)}");
if(loginData!.mobile == getEquidFrombb(data, 12)){ if (loginData!.mobile == getEquidFrombb(data, 12)) {
return true; return true;
} }
return false; return false;

View File

@ -6,58 +6,64 @@ import '../main/lockDetail/lcokSet/lockSet/lockSetInfo_entity.dart';
EventBus eventBus = EventBus(); EventBus eventBus = EventBus();
/// ///
class RefreshLockListInfoDataEvent{ class RefreshLockListInfoDataEvent {
RefreshLockListInfoDataEvent(); RefreshLockListInfoDataEvent();
} }
/// ///
class RefreshCheckInStaffListDataEvent{ class RefreshCheckInStaffListDataEvent {
RefreshCheckInStaffListDataEvent(); RefreshCheckInStaffListDataEvent();
} }
/// ///
class PassCurrentLockInformationEvent{ class PassCurrentLockInformationEvent {
LockSetInfoData lockSetInfoData; LockSetInfoData lockSetInfoData;
PassCurrentLockInformationEvent(this.lockSetInfoData); PassCurrentLockInformationEvent(this.lockSetInfoData);
} }
/// ///
class OtherTypeRefreshListEvent{ class OtherTypeRefreshListEvent {
OtherTypeRefreshListEvent(); OtherTypeRefreshListEvent();
} }
/// number /// number
class ChickInAddStaffCardAndFingerprintBlockNumberEvent{ class ChickInAddStaffCardAndFingerprintBlockNumberEvent {
String number; String number;
ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number); ChickInAddStaffCardAndFingerprintBlockNumberEvent(this.number);
} }
/// Uuid删除当前锁时 APP的时候扫描如果未被连接就传uuid过去 /// Uuid删除当前锁时 APP的时候扫描如果未被连接就传uuid过去
class ScanAllDeviceFindCurrentDeviceConnectedEvent{ class ScanAllDeviceFindCurrentDeviceConnectedEvent {
String uuid; String uuid;
ScanAllDeviceFindCurrentDeviceConnectedEvent(this.uuid); ScanAllDeviceFindCurrentDeviceConnectedEvent(this.uuid);
} }
/// ///
class ChangeLanguageBlockLastLanguageEvent{ class ChangeLanguageBlockLastLanguageEvent {
String languageTitle; String languageTitle;
ChangeLanguageBlockLastLanguageEvent(this.languageTitle); ChangeLanguageBlockLastLanguageEvent(this.languageTitle);
} }
/// ///
class LockGroupEditGroupLockRefreshEvent{ class LockGroupEditGroupLockRefreshEvent {
LockGroupEditGroupLockRefreshEvent(); LockGroupEditGroupLockRefreshEvent();
} }
/// ///
class LockSetChangeSetRefreshLockDetailWithType{ class LockSetChangeSetRefreshLockDetailWithType {
int type;// 0 1 int type; // 0 1
int setResult; int setResult;
LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult); LockSetChangeSetRefreshLockDetailWithType(this.type, this.setResult);
} }
/// ///
class GetTVDataRefreshUI{ class GetTVDataRefreshUI {
List<int> tvList; List<int> tvList;
GetTVDataRefreshUI(this.tvList); GetTVDataRefreshUI(this.tvList);
} }
///
class GetFirstFrameGoPush {
bool isFirstFrame;
GetFirstFrameGoPush(this.isFirstFrame);
}