diff --git a/lib/pages/discover/live_item_widget.dart b/lib/pages/discover/live_item_widget.dart index 0fbba7c..0038634 100644 --- a/lib/pages/discover/live_item_widget.dart +++ b/lib/pages/discover/live_item_widget.dart @@ -1,7 +1,10 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:dating_touchme_app/controller/discover/room_controller.dart'; +import 'package:dating_touchme_app/controller/overlay_controller.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/model/discover/rtc_channel_model.dart'; +import 'package:dating_touchme_app/pages/discover/live_room_page.dart'; +import 'package:dating_touchme_app/rtc/rtc_manager.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -39,10 +42,38 @@ class _LiveItemWidgetState extends State { Widget build(BuildContext context) { return InkWell( onTap: () async { + // 获取目标 channelId + String? targetChannelId; if (widget.channelId != null && widget.channelId!.isNotEmpty) { - await roomController.joinChannel(widget.channelId!); + targetChannelId = widget.channelId!; } else if (widget.item is Map && widget.item['channelId'] != null) { - await roomController.joinChannel(widget.item['channelId'].toString()); + targetChannelId = widget.item['channelId'].toString(); + } + + if (targetChannelId == null || targetChannelId.isEmpty) { + return; + } + + // 获取当前直播间的 channelId + final currentChannelId = RTCManager.instance.currentChannelId; + + // 如果 channelId 与当前直播间一致,直接进入直播间(逻辑与点击小窗口一致) + if (currentChannelId != null && + currentChannelId.isNotEmpty && + currentChannelId == targetChannelId) { + // 隐藏小窗口(如果显示的话) + if (Get.isRegistered()) { + final overlayController = Get.find(); + overlayController.hide(); + } + // 直接跳转到直播间 + Get.to(() => const LiveRoomPage(id: 0)); + } else { + // 如果不一致,先退出当前直播间,再加入新的直播间 + if (currentChannelId != null && currentChannelId.isNotEmpty) { + await roomController.leaveChannel(); + } + await roomController.joinChannel(targetChannelId); } }, child: ClipRRect( diff --git a/lib/pages/message/chat_page.dart b/lib/pages/message/chat_page.dart index d50df5a..2f401b5 100644 --- a/lib/pages/message/chat_page.dart +++ b/lib/pages/message/chat_page.dart @@ -167,11 +167,11 @@ class _ChatPageState extends State { ); // 只有发起通话成功时才跳转到视频通话页面 if (success) { - Get.to(() => VideoCallPage( - targetUserId: widget.userId, - userData: widget.userData ?? controller.userData, - isInitiator: true, - )); + Get.to(() => VideoCallPage( + targetUserId: widget.userId, + userData: widget.userData ?? controller.userData, + isInitiator: true, + )); } }, ); diff --git a/lib/widget/live/live_gift_popup.dart b/lib/widget/live/live_gift_popup.dart index 8c33c09..b77e324 100644 --- a/lib/widget/live/live_gift_popup.dart +++ b/lib/widget/live/live_gift_popup.dart @@ -39,6 +39,8 @@ class _LiveGiftPopupState extends State { int? _selectedUserId; // 标记是否已经尝试过设置默认选中 bool _hasTriedSetDefault = false; + // 上次发送礼物的时间(用于防抖,3秒内不允许重复点击) + DateTime? _lastSendGiftTime; @override void initState() { @@ -101,6 +103,17 @@ class _LiveGiftPopupState extends State { // 处理赠送礼物 Future _handleSendGift(int type) async { + // 检查是否在3秒内重复点击 + final now = DateTime.now(); + if (_lastSendGiftTime != null) { + final duration = now.difference(_lastSendGiftTime!); + if (duration.inSeconds < 3) { + SmartDialog.showToast('操作太频繁,请稍后再试'); + return; + } + } + _lastSendGiftTime = now; + // 检查是否选中了礼物 final activeIndex = widget.activeGift.value; if (activeIndex == null || diff --git a/lib/widget/live/live_room_chat_item.dart b/lib/widget/live/live_room_chat_item.dart index ef1f8cd..031fcd2 100644 --- a/lib/widget/live/live_room_chat_item.dart +++ b/lib/widget/live/live_room_chat_item.dart @@ -1,4 +1,5 @@ import 'package:dating_touchme_app/controller/discover/room_controller.dart'; +import 'package:dating_touchme_app/controller/global.dart'; import 'package:dating_touchme_app/extension/ex_widget.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/model/live/live_chat_message.dart'; @@ -77,6 +78,13 @@ class LiveRoomChatItem extends StatelessWidget { height: 25.w, ), ).onTap(() { + // 检查是否是当前用户自己的消息 + final currentUserId = GlobalData().userId ?? GlobalData().userData?.id; + if (currentUserId != null && currentUserId == message.userId) { + // 是自己的头像,不显示弹框 + return; + } + // 不是自己的消息,显示用户资料对话框 showUserProfileDialog( context, message,