From 699a1f25ed148ae2cf04a573f937c61e7e213b8b Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Mon, 9 Dec 2024 14:04:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/pages/metting/meeting_main_logic.dart | 39 ++++++++++++++++--- .../lib/pages/metting/meeting_main_state.dart | 4 +- .../lib/pages/metting/meeting_main_view.dart | 18 ++++----- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/wgshare/lib/pages/metting/meeting_main_logic.dart b/wgshare/lib/pages/metting/meeting_main_logic.dart index bd5e27b..ca1e7b3 100644 --- a/wgshare/lib/pages/metting/meeting_main_logic.dart +++ b/wgshare/lib/pages/metting/meeting_main_logic.dart @@ -95,7 +95,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ void getMeetingRoomAllUser(List meetingRoomUsers) async { state.users.value = meetingRoomUsers; state.cacheUsers.value = meetingRoomUsers; - // doHttpGetTvAnchor(); + doHttpGetTvAnchor(); } /// 启动计时 @@ -193,6 +193,24 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ Future doHttpGetTvAnchor() async { BaseStructureResult res = await getClient().getTvAnchor(state.roomNumber.value); state.remoteUid.value = res.data!.toString(); + + MeetingRoomUser? temporaryMru; + for(MeetingRoomUser mru in state.cacheUsers.value){ + if(mru.uid == res.data!.toString()){ + temporaryMru = mru; + } + } + + var isExist = false; + for(MeetingRoomUser mru in state.videoUsers.value){ + if(temporaryMru!.uid == mru.uid){ + isExist = true; + } + } + if(isExist == false){ + state.videoUsers.value.add(temporaryMru!); + } + if(res.data!.toString().length != 9){ if(state.remoteUid.value != UserStore.to.userInfoEntity.value!.uid) { Future.delayed(const Duration(milliseconds: 1000), () { @@ -416,11 +434,17 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); if(meetingRoomUser.enableCamera == true){ debugPrint("wgs输出===:Socket-用户单独开摄像头"); - for(MeetingRoomUser mru in state.cacheUsers.value){ + + var isExist = false; + for(MeetingRoomUser mru in state.videoUsers.value){ if(mru.uid == meetingRoomUser.uid){ - mru.enableCamera = true; + isExist = true; } } + if(isExist == false){ + state.videoUsers.value.add(meetingRoomUser); + } + if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid){ state.isOpenCamera.value = true; // 恢复发布视频流 @@ -436,11 +460,13 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } }else{ debugPrint("wgs输出===:Socket-用户单独闭摄像头"); - for(MeetingRoomUser mru in state.cacheUsers.value){ - if(mru.uid == meetingRoomUser.uid){ - mru.enableCamera = false; + + for(var i = 0; i < state.videoUsers.value.length; i++){ + if(state.videoUsers.value[i].uid == meetingRoomUser.uid){ + state.videoUsers.value.removeAt(i); } } + if(meetingRoomUser.uid == UserStore.to.userInfoEntity.value!.uid){ state.isOpenCamera.value = false; @@ -450,6 +476,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ stopPreview(); // 关闭本地预览悬浮窗 state.floating.value?.close(); + state.floating.value?.hideFloating(); } } }); diff --git a/wgshare/lib/pages/metting/meeting_main_state.dart b/wgshare/lib/pages/metting/meeting_main_state.dart index 43a0c94..39949ab 100644 --- a/wgshare/lib/pages/metting/meeting_main_state.dart +++ b/wgshare/lib/pages/metting/meeting_main_state.dart @@ -34,7 +34,7 @@ class MeetingMainState { /// 当前页面状态,0:语音,1:视频,2,共享 late RxInt pageState = 0.obs; /// 视频页面状态时,pageview指示器 - late RxInt pageIndex = 0.obs; + late RxInt pageIndex = 1.obs; /// 会议室编号 late RxString roomNumber = "".obs; @@ -56,6 +56,8 @@ class MeetingMainState { /// 搜索用户时,缓存会议室所有用户原始数据 late RxList cacheUsers = RxList([]); + late RxList videoUsers = RxList([]); + /// 是否被允许发言 late RxBool isSpeak = false.obs; /// 是否打开麦克风 diff --git a/wgshare/lib/pages/metting/meeting_main_view.dart b/wgshare/lib/pages/metting/meeting_main_view.dart index 14c1d01..a4c7bee 100644 --- a/wgshare/lib/pages/metting/meeting_main_view.dart +++ b/wgshare/lib/pages/metting/meeting_main_view.dart @@ -231,7 +231,7 @@ class MeetingMainPageState extends State { preloadPagesCount: 2, itemCount: 2, itemBuilder: (BuildContext context, int position) => returnPage(position), - controller: PreloadPageController(initialPage: 0), + controller: PreloadPageController(initialPage: 1), onPageChanged: (int position) { state.pageIndex.value = position; if(state.isSpeak.value == true && state.isOpenCamera.value == true){ @@ -1542,11 +1542,11 @@ class MeetingMainPageState extends State { crossAxisCount: 2, childAspectRatio: 0.8, crossAxisSpacing: 0), - itemCount: state.cacheUsers.value.where((user) => user.enableCamera == true).toList().length, + itemCount: state.videoUsers.value.length, itemBuilder: (BuildContext ctx, index) { return Stack( children: [ - state.cacheUsers.value[index].uid == + state.videoUsers.value[index].uid == UserStore.to.userInfoEntity.value!.uid ? AgoraVideoView( controller: VideoViewController( @@ -1559,7 +1559,7 @@ class MeetingMainPageState extends State { rtcEngine: state.rctEngine.value!, canvas: VideoCanvas( uid: int.tryParse( - state.cacheUsers.value[index].uid), setupMode: VideoViewSetupMode.videoViewSetupAdd), + state.videoUsers.value[index].uid), setupMode: VideoViewSetupMode.videoViewSetupAdd), connection: RtcConnection( channelId: state.roomNumber.value), ), @@ -1570,7 +1570,7 @@ class MeetingMainPageState extends State { child: Row( children: [ Visibility( - visible: state.cacheUsers.value[index].uid == UserStore.to.userInfoEntity.value!.uid, + visible: state.videoUsers.value[index].uid == UserStore.to.userInfoEntity.value!.uid, child: Image.asset( 'assets/images/meeting_main_own.png', width: 24.w, @@ -1585,7 +1585,7 @@ class MeetingMainPageState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: ColorUtil.Color_0_0_0_96), - child: state.cacheUsers.value[index].enableMicr == true + child: state.videoUsers.value[index].enableMicr == true ? Row( mainAxisAlignment: MainAxisAlignment.center, @@ -1597,7 +1597,7 @@ class MeetingMainPageState extends State { height: 20.h, child: LiquidCustomProgressIndicator( value: - state.cacheUsers.value[index] + state.videoUsers.value[index] .volume ?? 0.0, valueColor: @@ -1611,7 +1611,7 @@ class MeetingMainPageState extends State { .getMicrpphonePath()), ), Text( - state.cacheUsers.value[index].userName, + state.videoUsers.value[index].userName, style: TextStyle( fontSize: 12.sp, color: ColorUtil @@ -1631,7 +1631,7 @@ class MeetingMainPageState extends State { height: 20.h, ), Text( - state.cacheUsers.value[index].userName, + state.videoUsers.value[index].userName, style: TextStyle( fontSize: 12.sp, color: ColorUtil