From dbc8dc30af5c974c1aa31e573c0c98b14a8415f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AD=90=E8=B4=A4?= Date: Mon, 18 May 2026 17:55:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/controller/message/call_controller.dart | 8 ++++ .../message/chat_settings_controller.dart | 28 +++++++++++- lib/pages/home/timeline_info.dart | 40 ++++++++--------- lib/pages/home/user_information_page.dart | 9 +++- lib/pages/message/chat_settings_page.dart | 18 ++++---- lib/pages/message/message_page.dart | 18 +++++--- lib/pages/mine/mine_page.dart | 44 ++++++++++++++++--- lib/pages/mine/my_friend_page.dart | 19 +------- .../live/live_room_user_profile_dialog.dart | 6 ++- 9 files changed, 126 insertions(+), 64 deletions(-) diff --git a/lib/controller/message/call_controller.dart b/lib/controller/message/call_controller.dart index 52e3c5c..f5e589b 100644 --- a/lib/controller/message/call_controller.dart +++ b/lib/controller/message/call_controller.dart @@ -851,8 +851,12 @@ class CallController extends GetxController { print('📞 [CallController] 扬声器${isSpeakerOn.value ? "已开启" : "已关闭"}'); } + bool isClick = false; + /// 挂断通话 Future hangUpCall() async { + if(isClick) return; + isClick = true; final callSession = currentCall.value; // 取消超时计时器 @@ -875,6 +879,7 @@ class CallController extends GetxController { } } catch (e) { print('⚠️ [CallController] 调用取消接口异常: $e'); + isClick = false; } } else if (callSession != null && callDurationSeconds.value > 0 && @@ -892,6 +897,7 @@ class CallController extends GetxController { } } catch (e) { print('⚠️ [CallController] 调用终止接口异常: $e'); + isClick = false; } } @@ -900,6 +906,7 @@ class CallController extends GetxController { await RTCManager.instance.leaveChannel(); } catch (e) { print('⚠️ [CallController] 离开RTC频道异常: $e'); + isClick = false; } // 服务端会自动修改消息callStatus为'cancelled'或'terminated',客户端通过onMessageContentChanged收到通知 @@ -924,6 +931,7 @@ class CallController extends GetxController { } print('✅ [CallController] 通话已挂断'); + isClick = false; } /// 处理通话消息callStatus变化(通过onMessageContentChanged调用) diff --git a/lib/controller/message/chat_settings_controller.dart b/lib/controller/message/chat_settings_controller.dart index 3fdc16e..be9de2f 100644 --- a/lib/controller/message/chat_settings_controller.dart +++ b/lib/controller/message/chat_settings_controller.dart @@ -1,3 +1,4 @@ +import 'package:dating_touchme_app/network/user_api.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; @@ -14,6 +15,7 @@ class ChatSettingsController extends GetxController { final MarriageData? userData; final _storage = GetStorage(); + late UserApi _userApi; // 用户信息 final Rx userInfo = Rx(null); @@ -37,6 +39,7 @@ class ChatSettingsController extends GetxController { @override void onInit() { super.onInit(); + _userApi = Get.find(); try { // 验证 userId @@ -358,7 +361,7 @@ class ChatSettingsController extends GetxController { // 加入黑名单 await IMManager.instance.addToBlacklist(userId); isBlacklisted.value = true; - SmartDialog.showToast('已加入黑名单'); + createUserBlack(); } else { // 移出黑名单 await IMManager.instance.removeFromBlacklist(userId); @@ -374,6 +377,29 @@ class ChatSettingsController extends GetxController { } } + createUserBlack() async { + try { + final response = await _userApi.userCreateUserBlacklist({ + "blackUserId": userId, + }); + if (response.data.isSuccess) { + + SmartDialog.showToast('已拉黑成功'); + } else { + + // 响应失败,抛出异常 + throw Exception(response.data.message ?? '获取数据失败'); + } + } catch(e){ + print('拉黑失败: $e'); + SmartDialog.showToast('拉黑失败'); + rethrow; + + } finally { + + } + } + /// 切换关注状态 Future toggleFollow() async { try { diff --git a/lib/pages/home/timeline_info.dart b/lib/pages/home/timeline_info.dart index 53d5aa4..c88914c 100644 --- a/lib/pages/home/timeline_info.dart +++ b/lib/pages/home/timeline_info.dart @@ -345,26 +345,26 @@ class TimelineInfo extends StatelessWidget { // // }), // ), - ListenableBuilder( - listenable: controller.focusNode.value, // 直接监听焦点节点 - builder: (context, child) { - // 只有当焦点状态改变时,这段 builder 才会运行 - return Visibility( - visible: controller.focusNode.value.hasFocus, - child: GestureDetector( - onTap: () { - - FocusScope.of(context).unfocus(); - controller.parentId.value = "0"; - }, - child: Container( - color: const Color.fromRGBO(0, 0, 0, .4), - // 这里放遮罩层的内容 - ), - ), - ); - }, - ), + // ListenableBuilder( + // listenable: controller.focusNode.value, // 直接监听焦点节点 + // builder: (context, child) { + // // 只有当焦点状态改变时,这段 builder 才会运行 + // return Visibility( + // visible: controller.focusNode.value.hasFocus, + // child: GestureDetector( + // onTap: () { + // + // FocusScope.of(context).unfocus(); + // controller.parentId.value = "0"; + // }, + // child: Container( + // color: const Color.fromRGBO(0, 0, 0, .4), + // // 这里放遮罩层的内容 + // ), + // ), + // ); + // }, + // ), Positioned( left: 0, bottom: 0, diff --git a/lib/pages/home/user_information_page.dart b/lib/pages/home/user_information_page.dart index 70135fa..a0323de 100644 --- a/lib/pages/home/user_information_page.dart +++ b/lib/pages/home/user_information_page.dart @@ -1,6 +1,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:dating_touchme_app/controller/global.dart'; import 'package:dating_touchme_app/controller/home/user_information_controller.dart'; +import 'package:dating_touchme_app/extension/ex_widget.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/model/home/marriage_data.dart'; import 'package:dating_touchme_app/pages/home/report_page.dart'; @@ -91,12 +92,16 @@ class UserInformationPage extends StatelessWidget { width: 375.w, height: 384.w, fit: BoxFit.cover, - ) : CachedNetworkImage( + ).onTap((){ + TDImageViewer.showImageViewer(context: context, images: controller.userData.value.photoList!.map((e) => e.photoUrl.toString()).toList()); + }) : CachedNetworkImage( imageUrl: "${controller.userData.value.profilePhoto}?x-oss-process=image/format,webp", width: 375.w, height: 384.w, fit: BoxFit.cover, - ), + ).onTap((){ + TDImageViewer.showImageViewer(context: context, images: [controller.userData.value.profilePhoto]); + }), Positioned( left: 120.w, top: miId != GlobalData().userData!.id ? 300.w : 310.w, diff --git a/lib/pages/message/chat_settings_page.dart b/lib/pages/message/chat_settings_page.dart index 373fca2..7da389b 100644 --- a/lib/pages/message/chat_settings_page.dart +++ b/lib/pages/message/chat_settings_page.dart @@ -220,16 +220,16 @@ class ChatSettingsPage extends StatelessWidget { return Column( children: [ // 设置备注名 - _buildSettingItem( - title: '设置备注名', - showArrow: true, - onTap: () { - // TODO: 打开设置备注名弹窗 - _showSetRemarkDialog(controller); - }, - ), + // _buildSettingItem( + // title: '设置备注名', + // showArrow: true, + // onTap: () { + // // TODO: 打开设置备注名弹窗 + // _showSetRemarkDialog(controller); + // }, + // ), - _buildDivider(), + // _buildDivider(), // 加入黑名单 _buildSwitchItem( diff --git a/lib/pages/message/message_page.dart b/lib/pages/message/message_page.dart index e84e713..6635084 100644 --- a/lib/pages/message/message_page.dart +++ b/lib/pages/message/message_page.dart @@ -78,7 +78,7 @@ class _MessagePageState extends State with AutomaticKeepAliveClient children: [ if(controller.showSearch.value) Expanded( child: Container( - height: 27.w, + height: 35.w, padding: EdgeInsets.symmetric(horizontal: 10), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(27.w)), @@ -130,16 +130,22 @@ class _MessagePageState extends State with AutomaticKeepAliveClient SizedBox(width: 10,), Row( children: [ + Icon(Icons.close, size: 15,).onTap((){ + controller.searchController.value.clear(); + controller.onTextChanged(""); + controller.search(); + }), + SizedBox(width: 5,), Text( "搜索", style: TextStyle( - fontSize: 12 + fontSize: 15 ), - ) + ).onTap((){ + controller.search(); + }) ], - ).onTap((){ - controller.search(); - }) + ) ], ), ), diff --git a/lib/pages/mine/mine_page.dart b/lib/pages/mine/mine_page.dart index a95398f..062457b 100644 --- a/lib/pages/mine/mine_page.dart +++ b/lib/pages/mine/mine_page.dart @@ -16,6 +16,7 @@ import 'package:dating_touchme_app/pages/mine/user_help_center_page.dart'; import 'package:dating_touchme_app/pages/mine/vip_page.dart'; import 'package:dating_touchme_app/pages/setting/setting_page.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -203,13 +204,42 @@ class MinePageState extends State with AutomaticKeepAliveClientMixin{ ) ], ), - Text( - "ID:${controller.userId.value ?? ""}", - style: TextStyle( - fontSize: 10.w, - color: const Color.fromRGBO(51, 51, 51, 1), - fontWeight: FontWeight.w500 - ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "ID:${controller.userId.value ?? ""}", + style: TextStyle( + fontSize: 10.w, + color: const Color.fromRGBO(51, 51, 51, 1), + fontWeight: FontWeight.w500 + ), + ), + Container( + width: 33.w, + height: 13.w, + margin: EdgeInsets.only(left: 5.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(13.w)), + color: const Color.fromRGBO( + 201, 201, 201, 1.0) + ), + child: Center( + child: Text( + "复制", + style: TextStyle( + fontSize: 11.w, + color: Colors.white + ), + ), + ), + ).onTap(() async { + await Clipboard.setData( + ClipboardData(text: controller.userId.value ?? ""), + ); + SmartDialog.showToast('复制成功'); + }), + ], ), if(controller.userData.value?.matchmakerFlag ?? false) Text( "邀请码:${controller.userData.value?.code ?? ""}", diff --git a/lib/pages/mine/my_friend_page.dart b/lib/pages/mine/my_friend_page.dart index 14168be..8d6f734 100644 --- a/lib/pages/mine/my_friend_page.dart +++ b/lib/pages/mine/my_friend_page.dart @@ -265,24 +265,7 @@ class _UserItemState extends State { ) ], ), - Container( - width: 60.w, - height: 22.w, - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(22.w)), - color: const Color.fromRGBO(224, 224, 224, .5) - ), - child: Center( - child: Text( - "已关注", - style: TextStyle( - fontSize: 11.w, - color: const Color.fromRGBO(144, 144, 144, 1), - fontWeight: FontWeight.w500 - ), - ), - ), - ) + ], ), ).onTap((){ diff --git a/lib/widget/live/live_room_user_profile_dialog.dart b/lib/widget/live/live_room_user_profile_dialog.dart index 615297e..060793f 100644 --- a/lib/widget/live/live_room_user_profile_dialog.dart +++ b/lib/widget/live/live_room_user_profile_dialog.dart @@ -5,6 +5,7 @@ import 'package:dating_touchme_app/generated/assets.dart'; import 'package:dating_touchme_app/model/home/user_info_data.dart'; import 'package:dating_touchme_app/model/live/live_chat_message.dart'; import 'package:dating_touchme_app/pages/home/report_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_screenutil/flutter_screenutil.dart'; @@ -503,7 +504,10 @@ void showUserProfileDialog( height: 60.w, ), ), - ), + ).onTap((){ + Get.to(() => UserInformationPage(miId: userData.miId ?? "")); + + }), ], ); },