diff --git a/lib/controller/discover/room_controller.dart b/lib/controller/discover/room_controller.dart index 0468175..717db64 100644 --- a/lib/controller/discover/room_controller.dart +++ b/lib/controller/discover/room_controller.dart @@ -272,7 +272,6 @@ class RoomController extends GetxController with WidgetsBindingObserver { return; } if (!response.data.data['success']) { - SmartDialog.showToast('积分不足'); return; } currentRole = role; diff --git a/lib/controller/message/call_controller.dart b/lib/controller/message/call_controller.dart index c2c88b2..9fc8f32 100644 --- a/lib/controller/message/call_controller.dart +++ b/lib/controller/message/call_controller.dart @@ -57,6 +57,12 @@ class CallSession { final end = endTime ?? DateTime.now(); return end.difference(startTime).inSeconds; } + + @override + String toString() { + return '{callType: $callType, status: $status, isInitiator: $isInitiator}'; + } + } /// 通话相关控制器 diff --git a/lib/controller/mine/rose_controller.dart b/lib/controller/mine/rose_controller.dart index 12d21dc..984bc99 100644 --- a/lib/controller/mine/rose_controller.dart +++ b/lib/controller/mine/rose_controller.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:fluwx/fluwx.dart'; import 'package:get/get.dart'; +import '../discover/room_controller.dart'; class RoseController extends GetxController with WidgetsBindingObserver { @@ -96,6 +97,16 @@ class RoseController extends GetxController with WidgetsBindingObserver { launchWX.value = false; count.value = 0; getRoseNum(); + // 刷新 RoomController 的余额 + if (Get.isRegistered()) { + try { + final roomController = Get.find(); + await roomController.getVirtualAccount(); + print('✅ 已刷新 RoomController 的玫瑰余额'); + } catch (e) { + print('⚠️ 刷新 RoomController 余额失败: $e'); + } + } } else { count.value += 1; if(count.value < 3){ diff --git a/lib/controller/setting/spread_controller.dart b/lib/controller/setting/spread_controller.dart index a915015..a02b00c 100644 --- a/lib/controller/setting/spread_controller.dart +++ b/lib/controller/setting/spread_controller.dart @@ -65,15 +65,15 @@ class SpreadController extends GetxController with WidgetsBindingObserver { ]; } else if(roseList[activePay.value].subCategory == 88802){ revenue.value = [ - {'icon': '1', 'desc': '礼物收益范围15%-30%,嘉宾消费的分成3%;'}, - {'icon': '2', 'desc': '每天前5人连麦的礼物收益15%,第6-10人连麦的礼物收益20%,第11-15人连麦的礼物收益25%,第16人以上连麦的礼物收益30%;'}, + {'icon': '1', 'desc': '礼物收益范围40%,嘉宾消费的分成10%;'}, + // {'icon': '2', 'desc': '每天前5人连麦的礼物收益15%,第6-10人连麦的礼物收益20%,第11-15人连麦的礼物收益25%,第16人以上连麦的礼物收益30%;'}, {'icon': '3', 'desc': '红娘推荐的嘉宾成为红娘,赚取入驻费的20%分成;'}, {'icon': '4', 'desc': '新徒弟首月收益的10%(平台奖励)'}, ]; } else if(roseList[activePay.value].subCategory == 88801){ revenue.value = [ - {'icon': '1', 'desc': '礼物收益范围15%-30%,嘉宾消费的分成3%;'}, - {'icon': '2', 'desc': '每天前5人连麦的礼物收益15%,第6-10人连麦的礼物收益20%,第11-15人连麦的礼物收益25%,第16人以上连麦的礼物收益30%;'}, + {'icon': '1', 'desc': '礼物收益范围40%,嘉宾消费的分成10%;'}, + // {'icon': '2', 'desc': '每天前5人连麦的礼物收益15%,第6-10人连麦的礼物收益20%,第11-15人连麦的礼物收益25%,第16人以上连麦的礼物收益30%;'}, {'icon': '3', 'desc': '红娘推荐的嘉宾成为红娘,赚取入驻费的20%分成;'}, {'icon': '4', 'desc': '新徒弟首月收益的10%(平台奖励)'}, ]; diff --git a/lib/im/im_manager.dart b/lib/im/im_manager.dart index ddac92d..5d9e24f 100644 --- a/lib/im/im_manager.dart +++ b/lib/im/im_manager.dart @@ -1902,7 +1902,6 @@ class IMManager { return; } - RTMManager.instance.subscribe(channelId ?? ''); // 获取用户信息 Map? attributes; try { @@ -1953,6 +1952,7 @@ class IMManager { tag: 'video_call_invite_dialog', builder: (context) { return VideoCallInviteDialog( + callType: callType, avatarUrl: finalAvatarUrl, nickName: finalNickName, onTap: () async { diff --git a/lib/model/discover/rtc_channel_model.dart b/lib/model/discover/rtc_channel_model.dart index d90e79f..575e3d6 100644 --- a/lib/model/discover/rtc_channel_model.dart +++ b/lib/model/discover/rtc_channel_model.dart @@ -3,11 +3,13 @@ class RtcChannelModel { final String channelId; final String channelPic; final String channelName; + final int age; RtcChannelModel({ required this.channelId, required this.channelPic, required this.channelName, + required this.age, }); factory RtcChannelModel.fromJson(Map json) { @@ -15,6 +17,7 @@ class RtcChannelModel { channelId: json['channelId']?.toString() ?? '', channelPic: json['channelPic']?.toString() ?? '', channelName: json['channelName']?.toString() ?? '', + age: json['age'] ?? 0, ); } diff --git a/lib/pages/discover/live_item_widget.dart b/lib/pages/discover/live_item_widget.dart index 0038634..738f53f 100644 --- a/lib/pages/discover/live_item_widget.dart +++ b/lib/pages/discover/live_item_widget.dart @@ -187,27 +187,11 @@ class _LiveItemWidgetState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox( - width: 64.w, - child: Text( - widget.channel != null && widget.channel!.channelName.isNotEmpty - ? widget.channel!.channelName - : "一直一直在等你一直一直在等你......", - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 8.w, - color: Colors.white, - fontWeight: FontWeight.w500, - ), - ), - ), - SizedBox(height: 2.w), Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( - "福州 | 28岁", + widget.channel?.age != 0 && widget.channel?.age != null ? "${widget.channel?.channelName} | ${widget.channel?.age}岁" : widget.channel?.channelName ?? '', style: TextStyle( fontSize: 11.w, color: Colors.white, diff --git a/lib/pages/message/chat_page.dart b/lib/pages/message/chat_page.dart index c3e886b..39d2eeb 100644 --- a/lib/pages/message/chat_page.dart +++ b/lib/pages/message/chat_page.dart @@ -62,6 +62,9 @@ class _ChatPageState extends State { // 礼物弹窗相关 final activeGift = ValueNotifier(null); final giftNum = ValueNotifier(1); + + // ChatInputBar 的 GlobalKey,用于关闭底部面板 + final GlobalKey> _chatInputBarKey = GlobalKey>(); @override void initState() { @@ -305,18 +308,20 @@ class _ChatPageState extends State { }, ), ), - body: Column( - children: [ - // 消息列表区域 - Expanded( - child: Container( - color: Color(0xffF5F5F5), - child: GestureDetector( - onTap: () { - // 点击消息区域收起键盘 - FocusManager.instance.primaryFocus?.unfocus(); - }, - behavior: HitTestBehavior.opaque, + body: GestureDetector( + onTap: () { + // 点击空白处收起键盘 + FocusManager.instance.primaryFocus?.unfocus(); + // 关闭底部面板(表情、更多选项、语音输入) + ChatInputBar.closePanels(_chatInputBarKey); + }, + behavior: HitTestBehavior.opaque, + child: Column( + children: [ + // 消息列表区域 + Expanded( + child: Container( + color: Color(0xffF5F5F5), child: ListView.builder( controller: _scrollController, reverse: false, @@ -375,9 +380,9 @@ class _ChatPageState extends State { ), ), ), - ), // 使用抽离的聊天输入栏组件 ChatInputBar( + key: _chatInputBarKey, onSendMessage: (message) async { await controller.sendMessage(message); }, @@ -404,6 +409,7 @@ class _ChatPageState extends State { }, ), ], + ), ), ), ); diff --git a/lib/widget/message/chat_input_bar.dart b/lib/widget/message/chat_input_bar.dart index f761f96..f026941 100644 --- a/lib/widget/message/chat_input_bar.dart +++ b/lib/widget/message/chat_input_bar.dart @@ -31,6 +31,14 @@ class ChatInputBar extends StatefulWidget { @override State createState() => _ChatInputBarState(); + + // 静态方法:通过 key 关闭面板 + static void closePanels(GlobalKey? key) { + final state = key?.currentState; + if (state != null && state is _ChatInputBarState) { + state.closeAllPanels(); + } + } } class _ChatInputBarState extends State { @@ -109,6 +117,11 @@ class _ChatInputBarState extends State { } } + // 公开方法:从外部关闭所有面板 + void closeAllPanels() { + _closeAllPanels(); + } + @override void initState() { super.initState(); diff --git a/lib/widget/message/video_call_invite_dialog.dart b/lib/widget/message/video_call_invite_dialog.dart index f51c8f3..6e61459 100644 --- a/lib/widget/message/video_call_invite_dialog.dart +++ b/lib/widget/message/video_call_invite_dialog.dart @@ -2,6 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:dating_touchme_app/generated/assets.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; /// 视频通话邀请弹框 class VideoCallInviteDialog extends StatelessWidget { @@ -26,6 +27,7 @@ class VideoCallInviteDialog extends StatelessWidget { @override Widget build(BuildContext context) { + Get.log('VideoCallInviteDialog$callType'); return GestureDetector( onTap: onTap, child: Container(