From ff6e0569774ddee78c406f12075a3cdeddc0f9f0 Mon Sep 17 00:00:00 2001 From: Jolie <412895109@qq.com> Date: Mon, 29 Dec 2025 17:13:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(home):=20=E5=AE=8C=E5=96=84=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E9=97=B4=E8=B7=B3=E8=BD=AC=E9=80=BB=E8=BE=91=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=BB=E6=92=AD=E5=B1=95=E7=A4=BA=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 RoomController 和 OverlayController 依赖注入 - 实现进入直播间前隐藏小窗口和退出当前直播间的逻辑 - 添加异常处理和用户提示信息 - 移除主播展示界面中已添加好友的隐藏逻辑 - 更新加好友按钮文本为好友状态显示 - 优化用户交互逻辑防止好友状态下的重复操作 --- lib/pages/home/content_card.dart | 31 +++++++++++++++++-- .../live/live_room_anchor_showcase.dart | 16 +++++----- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/lib/pages/home/content_card.dart b/lib/pages/home/content_card.dart index 104b2ad..2912480 100644 --- a/lib/pages/home/content_card.dart +++ b/lib/pages/home/content_card.dart @@ -1,11 +1,14 @@ 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:flutter/material.dart'; -import 'package:get/get.dart'; import 'package:dating_touchme_app/model/home/marriage_data.dart'; +import 'package:dating_touchme_app/pages/discover/live_room_page.dart'; import 'package:dating_touchme_app/pages/home/user_information_page.dart'; import 'package:dating_touchme_app/pages/message/chat_page.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:get/get.dart'; // 通用头部组件:头像/昵称/在线/认证/Hi/直播中徽标 class _CardHeader extends StatelessWidget { @@ -228,7 +231,29 @@ class _CardHeader extends StatelessWidget { // 点击事件处理 if (isLive) { // 进入直播间逻辑 - print('进入直播间'); + try { + // 1. 隐藏直播间小窗口(如果存在) + if (Get.isRegistered()) { + final overlayController = Get.find(); + overlayController.hide(); + } + + // 2. 获取 RoomController 实例 + final roomController = Get.isRegistered() + ? Get.find() + : Get.put(RoomController()); + + // 3. 如果当前已经在直播间,先退出当前直播间 + // leaveChannel 内部会处理未在频道时的情况 + await roomController.leaveChannel(); + + // 4. 跳转到新的直播间页面 + // 这里暂时使用 id: 0,实际频道信息由后端/进入逻辑决定 + await Get.to(() => const LiveRoomPage(id: 0)); + } catch (e) { + print('❌ [ContentCard] 进入直播间失败: $e'); + SmartDialog.showToast('进入直播间失败,请重试'); + } } else if (isOnline) { // HI按钮点击逻辑 - 跳转到聊天页面 try { diff --git a/lib/widget/live/live_room_anchor_showcase.dart b/lib/widget/live/live_room_anchor_showcase.dart index 4ccf29d..b0f28d1 100644 --- a/lib/widget/live/live_room_anchor_showcase.dart +++ b/lib/widget/live/live_room_anchor_showcase.dart @@ -94,10 +94,6 @@ class _LiveRoomAnchorShowcaseState extends State { .rtcChannelDetail .value ?.anchorInfo; - // 如果已经是好友,不显示加好友按钮 - if (anchorInfo?.isFriend == true) { - return const SizedBox.shrink(); - } return Positioned( bottom: 5.w, right: 5.w, @@ -110,7 +106,7 @@ class _LiveRoomAnchorShowcaseState extends State { ), child: Center( child: Text( - "加好友", + anchorInfo?.isFriend == true ? '好友' : "加好友", style: TextStyle( fontSize: 11.w, color: const Color.fromRGBO(117, 98, 249, 1), @@ -119,6 +115,9 @@ class _LiveRoomAnchorShowcaseState extends State { ), ), ).onTap((){ + if(anchorInfo?.isFriend == true){ + return; + } if (anchorInfo != null) { _showGiftPopupForUser(anchorInfo, 2); } @@ -253,7 +252,7 @@ class _LiveRoomAnchorShowcaseState extends State { ), ), ), - if(!isCurrentUser && userInfo.isFriend != true) + if(!isCurrentUser) Positioned( top: 5.w, right: 5.w, @@ -292,7 +291,7 @@ class _LiveRoomAnchorShowcaseState extends State { ), child: Center( child: Text( - "加好友", + userInfo.isFriend != true ? "加好友" : '好友', style: TextStyle( fontSize: 11.w, color: const Color.fromRGBO(117, 98, 249, 1), @@ -300,6 +299,9 @@ class _LiveRoomAnchorShowcaseState extends State { ), ), ).onTap((){ + if(userInfo.isFriend == true){ + return; + } _showGiftPopupForUser(userInfo, 2); }), ),