|
|
|
@ -201,6 +201,10 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
SmartDialog.showToast(response.data.message); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!response.data.data['success']) { |
|
|
|
SmartDialog.showToast('积分不足'); |
|
|
|
return; |
|
|
|
} |
|
|
|
currentRole = role; |
|
|
|
if (role == CurrentRole.maleAudience || |
|
|
|
role == CurrentRole.femaleAudience) { |
|
|
|
@ -264,7 +268,8 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Future<void> _fetchRtcChannelDetail(String channelName) async { |
|
|
|
/// 获取 RTC 频道详情(公有方法,供外部调用) |
|
|
|
Future<void> fetchRtcChannelDetail(String channelName) async { |
|
|
|
try { |
|
|
|
final response = await _networkService.rtcApi.getRtcChannelDetail( |
|
|
|
channelName, |
|
|
|
@ -278,6 +283,10 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Future<void> _fetchRtcChannelDetail(String channelName) async { |
|
|
|
await fetchRtcChannelDetail(channelName); |
|
|
|
} |
|
|
|
|
|
|
|
/// 发送公屏消息 |
|
|
|
Future<void> sendChatMessage(String content) async { |
|
|
|
final channelName = RTCManager.instance.currentChannelId; |
|
|
|
@ -362,7 +371,7 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
/// 赠送礼物 |
|
|
|
Future<void> sendGift({ |
|
|
|
required GiftProductModel gift, |
|
|
|
String? targetUserId, |
|
|
|
required int targetUserId, |
|
|
|
}) async { |
|
|
|
try { |
|
|
|
// 先调用消费接口 |
|
|
|
@ -376,7 +385,7 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
final requestData = { |
|
|
|
'channelId': int.tryParse(channelId) ?? 0, |
|
|
|
'type': 1, // 1.送礼 2.添加好友 |
|
|
|
'toUId': targetUserId != null ? int.tryParse(targetUserId) ?? 0 : 0, |
|
|
|
'toUId': targetUserId, |
|
|
|
'productSpecId': int.tryParse(gift.productSpecId) ?? 0, |
|
|
|
'quantity': 1, |
|
|
|
}; |
|
|
|
@ -399,7 +408,7 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
SvgaAnimationItem( |
|
|
|
svgaFile: gift.svgaFile, |
|
|
|
targetUserId: targetUserId, |
|
|
|
senderUserId: GlobalData().userId ?? GlobalData().userData?.id, |
|
|
|
senderUserId: rtcChannel.value?.uid, |
|
|
|
giftProductId: gift.productId, |
|
|
|
), |
|
|
|
); |
|
|
|
@ -411,7 +420,7 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
'svgaFile': gift.svgaFile, |
|
|
|
'giftProductId': gift.productId, |
|
|
|
'targetUserId': targetUserId, |
|
|
|
'senderUserId': GlobalData().userId ?? GlobalData().userData?.id, |
|
|
|
'senderUserId': rtcChannel.value?.uid, |
|
|
|
'senderNickName': GlobalData().userData?.nickName ?? '', |
|
|
|
}; |
|
|
|
|
|
|
|
@ -433,8 +442,8 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
try { |
|
|
|
final svgaFile = message['svgaFile']?.toString() ?? ''; |
|
|
|
final giftProductId = message['giftProductId']?.toString(); |
|
|
|
final targetUserId = message['targetUserId']?.toString(); |
|
|
|
final senderUserId = message['senderUserId']?.toString(); |
|
|
|
final targetUserId = message['targetUserId']?.toInt() ?? 0; |
|
|
|
final senderUserId = message['senderUserId']?.toInt() ?? 0; |
|
|
|
final senderNickName = message['senderNickName']?.toString() ?? ''; |
|
|
|
|
|
|
|
if (svgaFile.isNotEmpty) { |
|
|
|
@ -453,88 +462,6 @@ class RoomController extends GetxController with WidgetsBindingObserver { |
|
|
|
} catch (e) { |
|
|
|
print('❌ 处理礼物消息失败: $e'); |
|
|
|
} |
|
|
|
} else if (message['type'] == 'join_chat') { |
|
|
|
final response = await _networkService.rtcApi |
|
|
|
.getDatingRtcChannelUserDetail( |
|
|
|
rtcChannel.value!.channelId, |
|
|
|
message['uid'], |
|
|
|
); |
|
|
|
if (!response.data.isSuccess) { |
|
|
|
return; |
|
|
|
} |
|
|
|
final currentDetail = rtcChannelDetail.value; |
|
|
|
if (currentDetail == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
final userData = response.data.data; |
|
|
|
if (userData == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (message['role'] == 'male_audience') { |
|
|
|
final maleInfo = RtcSeatUserInfo( |
|
|
|
miId: userData.miId, |
|
|
|
userId: userData.userId, |
|
|
|
nickName: userData.nickName, |
|
|
|
profilePhoto: userData.profilePhoto, |
|
|
|
genderCode: userData.genderCode, |
|
|
|
seatNumber: userData.seatNumber, |
|
|
|
isFriend: userData.isFriend, |
|
|
|
isMicrophoneOn: userData.isMicrophoneOn, |
|
|
|
isVideoOn: userData.isVideoOn, |
|
|
|
uid: message['uid'] is int |
|
|
|
? message['uid'] as int |
|
|
|
: int.tryParse(message['uid']?.toString() ?? ''), |
|
|
|
); |
|
|
|
final newDetail = RtcChannelDetail( |
|
|
|
channelId: currentDetail.channelId, |
|
|
|
anchorInfo: currentDetail.anchorInfo, |
|
|
|
maleInfo: maleInfo, |
|
|
|
femaleInfo: currentDetail.femaleInfo, |
|
|
|
); |
|
|
|
rtcChannelDetail.value = newDetail; |
|
|
|
} else if (message['role'] == 'female_audience') { |
|
|
|
final femaleInfo = RtcSeatUserInfo( |
|
|
|
miId: userData.miId, |
|
|
|
userId: userData.userId, |
|
|
|
nickName: userData.nickName, |
|
|
|
profilePhoto: userData.profilePhoto, |
|
|
|
genderCode: userData.genderCode, |
|
|
|
seatNumber: userData.seatNumber, |
|
|
|
isFriend: userData.isFriend, |
|
|
|
isMicrophoneOn: userData.isMicrophoneOn, |
|
|
|
isVideoOn: userData.isVideoOn, |
|
|
|
uid: message['uid'] is int |
|
|
|
? message['uid'] as int |
|
|
|
: int.tryParse(message['uid']?.toString() ?? ''), |
|
|
|
); |
|
|
|
final newDetail = RtcChannelDetail( |
|
|
|
channelId: currentDetail.channelId, |
|
|
|
anchorInfo: currentDetail.anchorInfo, |
|
|
|
maleInfo: currentDetail.maleInfo, |
|
|
|
femaleInfo: femaleInfo, |
|
|
|
); |
|
|
|
rtcChannelDetail.value = newDetail; |
|
|
|
} |
|
|
|
// } |
|
|
|
} else if (message['type'] == 'leave_chat') { |
|
|
|
if (message['role'] == 'male_audience') { |
|
|
|
final newDetail = RtcChannelDetail( |
|
|
|
channelId: rtcChannelDetail.value!.channelId, |
|
|
|
anchorInfo: rtcChannelDetail.value!.anchorInfo, |
|
|
|
maleInfo: null, |
|
|
|
femaleInfo: rtcChannelDetail.value!.femaleInfo, |
|
|
|
); |
|
|
|
rtcChannelDetail.value = newDetail; |
|
|
|
} else if (message['role'] == 'female_audience') { |
|
|
|
final newDetail = RtcChannelDetail( |
|
|
|
channelId: rtcChannelDetail.value!.channelId, |
|
|
|
anchorInfo: rtcChannelDetail.value!.anchorInfo, |
|
|
|
maleInfo: rtcChannelDetail.value!.maleInfo, |
|
|
|
femaleInfo: null, |
|
|
|
); |
|
|
|
rtcChannelDetail.value = newDetail; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|