Browse Source

完善功能

dev-2.0
王子贤 1 month ago
parent
commit
94aab5d770
12 changed files with 268 additions and 34 deletions
  1. 21
      lib/controller/discover/room_controller.dart
  2. 2
      lib/network/rtc_api.dart
  3. 6
      lib/network/rtc_api.g.dart
  4. 1
      lib/network/user_api.dart
  5. 3
      lib/network/user_api.g.dart
  6. 27
      lib/pages/home/content_card.dart
  7. 4
      lib/widget/live/kick_list.dart
  8. 6
      lib/widget/live/live_room_anchor_showcase.dart
  9. 2
      lib/widget/live/live_room_chat_item.dart
  10. 17
      lib/widget/live/live_room_invitation_list.dart
  11. 113
      lib/widget/live/live_room_user_header.dart
  12. 100
      lib/widget/live/live_room_user_profile_dialog.dart

21
lib/controller/discover/room_controller.dart

@ -176,21 +176,21 @@ class RoomController extends GetxController with WidgetsBindingObserver {
final tab = 0.obs;
changeTab(int i) async {
changeTab(int i, int genderCode) async {
tab.value = i;
if(tab.value == 0){
page.value = 1;
audienceList.clear();
await getAudienceList();
await getAudienceList(genderCode);
} else if(tab.value == 1) {
page.value = 1;
audienceList.clear();
await getOnMicList();
await getOnMicList(genderCode);
} else if(tab.value == 2) {
page.value = 1;
audienceList.clear();
await getFriendList();
await getFriendList(genderCode);
}
update();
listRefreshController.finishRefresh(IndicatorResult.success);
@ -203,14 +203,15 @@ class RoomController extends GetxController with WidgetsBindingObserver {
late final EasyRefreshController listRefreshController;
getAudienceList() async {
getAudienceList(int? genderCode) async {
try{
final channelId = RTCManager.instance.currentChannelId;
final response = await _networkService.rtcApi.userPageRtcChannelAudience(
pageNum: page.value,
pageSize: 10,
channelId: channelId ?? ""
channelId: channelId ?? "",
genderCode: genderCode
);
if (response.data.isSuccess && response.data.data != null) {
final data = response.data.data?.records ?? [];
@ -235,14 +236,15 @@ class RoomController extends GetxController with WidgetsBindingObserver {
}
}
getOnMicList() async {
getOnMicList(int genderCode) async {
try{
final channelId = RTCManager.instance.currentChannelId;
final response = await _networkService.rtcApi.userPageMicJoinRtcChannelUser(
pageNum: page.value,
pageSize: 10,
channelId: channelId ?? ""
channelId: channelId ?? "",
genderCode: genderCode
);
if (response.data.isSuccess && response.data.data != null) {
final data = response.data.data?.records ?? [];
@ -268,11 +270,12 @@ class RoomController extends GetxController with WidgetsBindingObserver {
}
getFriendList() async {
getFriendList(int genderCode) async {
try{
final response = await _networkService.userApi.userPageFriendRelation(
pageNum: page.value,
pageSize: 10,
genderCode: genderCode
);
if (response.data.isSuccess && response.data.data != null) {
final data = response.data.data?.records ?? [];

2
lib/network/rtc_api.dart

@ -151,6 +151,7 @@ abstract class RtcApi {
@Query('pageNum') required int pageNum,
@Query('pageSize') required int pageSize,
@Query('channelId') required String channelId,
@Query('genderCode') int? genderCode,
}
);
@ -160,6 +161,7 @@ abstract class RtcApi {
@Query('pageNum') required int pageNum,
@Query('pageSize') required int pageSize,
@Query('channelId') required String channelId,
@Query('genderCode') int? genderCode,
}
);

6
lib/network/rtc_api.g.dart

@ -792,13 +792,16 @@ class _RtcApi implements RtcApi {
required int pageNum,
required int pageSize,
required String channelId,
int? genderCode,
}) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'pageNum': pageNum,
r'pageSize': pageSize,
r'channelId': channelId,
r'genderCode': genderCode,
};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _options =
@ -835,13 +838,16 @@ class _RtcApi implements RtcApi {
required int pageNum,
required int pageSize,
required String channelId,
int? genderCode,
}) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'pageNum': pageNum,
r'pageSize': pageSize,
r'channelId': channelId,
r'genderCode': genderCode,
};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _options =

1
lib/network/user_api.dart

@ -228,6 +228,7 @@ abstract class UserApi {
{
@Query('pageNum') required int pageNum,
@Query('pageSize') required int pageSize,
@Query('genderCode') int? genderCode,
}
);

3
lib/network/user_api.g.dart

@ -1350,12 +1350,15 @@ class _UserApi implements UserApi {
Future<HttpResponse<BaseResponse<FriendData>>> userPageFriendRelation({
required int pageNum,
required int pageSize,
int? genderCode,
}) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'pageNum': pageNum,
r'pageSize': pageSize,
r'genderCode': genderCode,
};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _options = _setStreamType<HttpResponse<BaseResponse<FriendData>>>(

27
lib/pages/home/content_card.dart

@ -8,6 +8,7 @@ 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_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
@ -121,7 +122,7 @@ class _CardHeader extends StatelessWidget {
),
),
//
if (item.liveStreaming)
if (false)
Container(
padding: const EdgeInsets.symmetric(
horizontal: 8,
@ -203,10 +204,16 @@ class _CardHeader extends StatelessWidget {
}
}
},
child: Image.asset(
child: !item.liveStreaming ? Image.asset(
_getButtonImage(isLive, isOnline),
width: item.liveStreaming ? 60 : 50,
height: 30,
) : Text(
"视频相亲中",
style: TextStyle(
color: const Color.fromRGBO(255, 120, 120, 1),
fontSize: 11.w
),
),
),
],
@ -232,10 +239,22 @@ class ContentCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
onTap: () async {
if (item.liveStreaming) {
late final RoomController roomController;
if (Get.isRegistered<RoomController>()) {
roomController = Get.find<RoomController>();
} else {
roomController = Get.put(RoomController());
}
await roomController.joinChannel(item.isLiveChannelId ?? "");
} else {
Get.to(() => UserInformationPage(miId: item.miId, userId: item.userId,));
}
//
// userId miId使 miId
Get.to(() => UserInformationPage(miId: item.miId, userId: item.userId,));
},
child: Container(
decoration: BoxDecoration(

4
lib/widget/live/kick_list.dart

@ -80,7 +80,7 @@ class _KickListState extends State<KickList> {
print('推荐列表下拉刷新被触发');
_roomController.page.value = 1;
_roomController.audienceList.clear();
await _roomController.getAudienceList();
await _roomController.getAudienceList(null);
_roomController.listRefreshController.finishRefresh(IndicatorResult.success);
_roomController.listRefreshController.finishLoad(IndicatorResult.none);
},
@ -88,7 +88,7 @@ class _KickListState extends State<KickList> {
onLoad: () async {
print('推荐列表上拉加载被触发, hasMore: ');
_roomController.page.value += 1;
await _roomController.getAudienceList();
await _roomController.getAudienceList(null);
},
child: ListView.separated(
// 使

6
lib/widget/live/live_room_anchor_showcase.dart

@ -447,8 +447,8 @@ class _LiveRoomAnchorShowcaseState extends State<LiveRoomAnchorShowcase> {
content: "",
timestamp: 0
),
() =>
_showGiftPopupForUser(userInfo, 1),
(int type) =>
_showGiftPopupForUser(userInfo, type),
response.data.data!
);
} else {
@ -512,7 +512,7 @@ class _LiveRoomAnchorShowcaseState extends State<LiveRoomAnchorShowcase> {
void _showGuestListDialog(BuildContext context, bool isMaleSeat) async {
_roomController.audienceList.clear();
await _roomController.getAudienceList();
await _roomController.getAudienceList(isMaleSeat ? 0 : 1);
_roomController.setDialogDismiss(true);
SmartDialog.show(
alignment: Alignment.bottomCenter,

2
lib/widget/live/live_room_chat_item.dart

@ -97,7 +97,7 @@ class LiveRoomChatItem extends StatelessWidget {
showUserProfileDialog(
context,
message,
() => _showGiftPopup(context, 1),
(int type) => _showGiftPopup(context, type),
response.data.data!
);

17
lib/widget/live/live_room_invitation_list.dart

@ -28,10 +28,13 @@ class _LiveRoomInvitationListState extends State<LiveRoomInvitationList> with Ti
final RoomController _roomController = Get.find<RoomController>();
int genderCode = 0;
@override
void initState() {
super.initState();
_tabController = TabController(length: 3, vsync: this);
genderCode = widget.nowSex == 0 ? 1 : 0;
}
List<Map<String, dynamic>> selectUserId = [];
@ -69,7 +72,7 @@ class _LiveRoomInvitationListState extends State<LiveRoomInvitationList> with Ti
controller: _tabController,
showIndicator: true,
onTap: (int i) async {
_roomController.changeTab(i);
_roomController.changeTab(i, genderCode);
},
),
),
@ -108,11 +111,11 @@ class _LiveRoomInvitationListState extends State<LiveRoomInvitationList> with Ti
_roomController.page.value = 1;
_roomController.audienceList.clear();
if(_roomController.tab.value == 0){
await _roomController.getAudienceList();
await _roomController.getAudienceList(genderCode);
} else if(_roomController.tab.value == 1){
await _roomController.getOnMicList();
await _roomController.getOnMicList(genderCode);
} else if(_roomController.tab.value == 2){
await _roomController.getFriendList();
await _roomController.getFriendList(genderCode);
}
_roomController.listRefreshController.finishRefresh(IndicatorResult.success);
_roomController.listRefreshController.finishLoad(IndicatorResult.none);
@ -122,11 +125,11 @@ class _LiveRoomInvitationListState extends State<LiveRoomInvitationList> with Ti
print('推荐列表上拉加载被触发, hasMore: ');
_roomController.page.value += 1;
if(_roomController.tab.value == 0){
await _roomController.getAudienceList();
await _roomController.getAudienceList(genderCode);
} else if(_roomController.tab.value == 1){
await _roomController.getOnMicList();
await _roomController.getOnMicList(genderCode);
} else if(_roomController.tab.value == 2){
await _roomController.getFriendList();
await _roomController.getFriendList(genderCode);
}
},
child: Obx(() {

113
lib/widget/live/live_room_user_header.dart

@ -1,11 +1,17 @@
import 'package:dating_touchme_app/controller/discover/room_controller.dart';
import 'package:dating_touchme_app/controller/global.dart';
import 'package:dating_touchme_app/controller/overlay_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/live/live_chat_message.dart';
import 'package:dating_touchme_app/model/rtc/rtc_channel_detail.dart';
import 'package:dating_touchme_app/network/user_api.dart';
import 'package:dating_touchme_app/pages/discover/live_end_page.dart';
import 'package:dating_touchme_app/pages/discover/settlement_page.dart';
import 'package:dating_touchme_app/widget/live/disconnect_mic_dialog.dart';
import 'package:dating_touchme_app/widget/live/kick_list.dart';
import 'package:dating_touchme_app/widget/live/live_gift_popup.dart';
import 'package:dating_touchme_app/widget/live/live_room_user_profile_dialog.dart';
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -34,6 +40,59 @@ class LiveRoomUserHeader extends StatelessWidget {
final VoidCallback? onFollowTap;
final VoidCallback? onCloseTap;
void _showGiftPopupForUser(RtcSeatUserInfo? userInfo, int type) async {
// RoomController
final _roomController = Get.find<RoomController>();
if (userInfo == null) {
return;
}
// ID使userId使miId
final targetUserId = userInfo.uid;
if (targetUserId == null) {
SmartDialog.showToast('用户ID不存在');
return;
}
//
await _roomController.getVirtualAccount();
// ValueNotifier
final activeGift = ValueNotifier<int?>(null);
final giftNum = ValueNotifier<int>(1);
_roomController.setDialogDismiss(true);
SmartDialog.show(
alignment: Alignment.bottomCenter,
maskColor: Colors.black.withOpacity(0.5),
onDismiss: (){
_roomController.setDialogDismiss(false);
},
builder: (context) {
return Obx(() {
//
final giftProducts = _roomController.giftProducts;
final giftList = giftProducts.toList();
return LiveGiftPopup(
activeGift: activeGift,
giftNum: giftNum,
giftList: giftList,
changeActive: (index) {
activeGift.value = index;
},
type: type,
showHeader: false, //
targetUserId: targetUserId, // ID
);
});
},
);
}
@override
Widget build(BuildContext context) {
// RoomController
@ -69,7 +128,57 @@ class LiveRoomUserHeader extends StatelessWidget {
);
},
),
),
).onTap(() async {
//
final currentUserId = GlobalData().userId ?? GlobalData().userData?.id;
if (currentUserId != null && currentUserId == roomController.rtcChannelDetail
.value?.anchorInfo?.userId) {
//
return;
}
try {
final _userApi = Get.find<UserApi>();
final response = await _userApi.getDongwoMarriageInformationDetail(miId: roomController.rtcChannelDetail
.value?.anchorInfo?.miId ?? "");
if (response.data.isSuccess && response.data.data != null) {
//
showUserProfileDialog(
context,
LiveChatMessage(
userId: roomController.rtcChannelDetail
.value?.anchorInfo?.userId ?? "",
uid: roomController.rtcChannelDetail
.value?.anchorInfo?.uid,
userName: roomController.rtcChannelDetail
.value?.anchorInfo?.nickName ?? "",
avatar: roomController.rtcChannelDetail
.value?.anchorInfo?.profilePhoto,
miId: roomController.rtcChannelDetail
.value?.anchorInfo?.miId,
content: "",
timestamp: 0
),
(int type) =>
_showGiftPopupForUser(roomController.rtcChannelDetail
.value?.anchorInfo, type),
response.data.data!
);
} else {
//
final errorMsg = response.data.message ?? '获取数据失败';
SmartDialog.showToast(errorMsg);
}
} catch(e, stackTrace){
print('获取用户信息失败: $e');
print('堆栈跟踪: $stackTrace');
SmartDialog.showToast('获取用户信息失败,请稍后重试');
// rethrow退
}
}),
SizedBox(width: 7.w),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -120,7 +229,7 @@ class LiveRoomUserHeader extends StatelessWidget {
GestureDetector(
onTap: () async {
roomController.audienceList.clear();
await roomController.getAudienceList();
await roomController.getAudienceList(null);
//
FocusScope.of(context).unfocus();
// overlay

100
lib/widget/live/live_room_user_profile_dialog.dart

@ -14,7 +14,7 @@ import 'package:get/get.dart';
void showUserProfileDialog(
BuildContext context,
LiveChatMessage message,
VoidCallback onShowGiftPopup,
Function(int) onShowGiftPopup,
UserInfoData userData,
) {
@ -71,7 +71,6 @@ void showUserProfileDialog(
),
Row(
children: [
SizedBox(width: 30.w),
//
Expanded(
child: Column(
@ -290,7 +289,7 @@ void showUserProfileDialog(
),
child: Center(
child: Text(
"出房间",
"出房间",
style: TextStyle(
color: Colors.white
),
@ -325,13 +324,92 @@ void showUserProfileDialog(
),
).onTap(() async {
SmartDialog.dismiss();
onShowGiftPopup();
onShowGiftPopup(2);
}),
],
),
if(!isHost) Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
width: 165.w,
height: 35.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8.w)),
color: const Color.fromRGBO(253, 43, 84, 1),
gradient: const LinearGradient(
colors: [
Color.fromRGBO(117, 98, 249, 1),
Color.fromRGBO(152, 124, 255, 1),
],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
),
child: Center(
child: Text(
"私聊",
style: TextStyle(
color: Colors.white
),
),
),
).onTap(() async {
await roomController.inviteMic([{"userId": message.userId, "uid": message.uid}]);
SmartDialog.dismiss();
Get.to(() => ChatPage(
userId: message.userId,
));
}),
if(!(userData.isFriend ?? false)) Container(
width: 165.w,
height: 35.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8 .w)),
color: const Color.fromRGBO(245, 154, 35, 1),
),
child: Center(
child: Text(
"加好友",
style: TextStyle(
color: Colors.white
),
),
),
).onTap(() async {
SmartDialog.dismiss();
onShowGiftPopup(2);
}),
if(userData.isFriend ?? false) Container(
width: 165.w,
height: 35.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8 .w)),
color: const Color.fromRGBO(245, 154, 35, 1),
),
child: Center(
child: Text(
"送礼物",
style: TextStyle(
color: Colors.white
),
),
),
).onTap(() async {
SmartDialog.dismiss();
onShowGiftPopup(1);
}),
],
),
SizedBox(height: 15.w),
//
Row(
if(isHost) Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_buildActionLink('私聊', () {
@ -366,7 +444,17 @@ void showUserProfileDialog(
),
_buildActionLink('送礼物', () {
SmartDialog.dismiss();
onShowGiftPopup();
onShowGiftPopup(1);
}),
],
),
//
if(!isHost) Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if(!(userData.isFriend ?? false)) _buildActionLink('送礼物', () {
SmartDialog.dismiss();
onShowGiftPopup(1);
}),
],
),

Loading…
Cancel
Save