chatapp3-flutter/lib/ui_kit/widgets/room/room_online_user_widget.dart
2026-04-09 21:32:23 +08:00

174 lines
6.6 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:provider/provider.dart';
import 'package:yumi/ui_kit/components/sc_compontent.dart';
import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:yumi/shared/tools/sc_lk_dialog_util.dart';
import 'package:yumi/services/room/rc_room_manager.dart';
import 'package:yumi/services/audio/rtc_manager.dart';
import 'package:yumi/modules/room/online/room_online_page.dart';
import 'package:yumi/modules/room/rank/room_gift_rank_page.dart';
class RoomOnlineUserWidget extends StatefulWidget {
@override
_RoomOnlineUserWidgetState createState() => _RoomOnlineUserWidgetState();
}
class _RoomOnlineUserWidgetState extends State<RoomOnlineUserWidget> {
@override
Widget build(BuildContext context) {
return Consumer<RtcProvider>(
builder: (context, ref, child) {
return Row(
children: [
_buildExperience(),
SizedBox(width: 15.w),
ref.onlineUsers.isNotEmpty
? Expanded(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Spacer(),
SizedBox(
height: 25.w,
child: Stack(
clipBehavior: Clip.none,
children: [
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisSize: MainAxisSize.min,
children: List.generate(
ref.onlineUsers.length,
(index) {
return Transform.translate(
offset: Offset(-3.w * index, 0),
child: Padding(
padding: EdgeInsets.only(right: 0.w),
child: netImage(
url:
ref
.onlineUsers[index]
.userAvatar ??
"",
width: 23.w,
height: 23.w,
shape: BoxShape.circle,
border: Border.all(
color: Colors.white,
width: 1.w,
),
),
),
);
},
),
),
),
],
),
),
GestureDetector(
child: Container(
padding: EdgeInsets.symmetric(
horizontal: 3.w,
vertical: 3.w,
),
child: Column(
children: [
Image.asset(
"sc_images/room/sc_icon_online_peple.png",
width: 12.w,
height: 12.sp,
),
text(
"${ref.onlineUsers.length}",
fontSize: 9.sp,
),
],
),
),
onTap: () {
showBottomInBottomDialog(
context,
RoomOnlinePage(
roomId:
ref
.currenRoom
?.roomProfile
?.roomProfile
?.id,
),
);
},
),
SizedBox(width: 5.w,)
],
),
)
: Container(),
],
);
},
);
}
///房间榜单入口
_buildExperience() {
return Consumer<SocialChatRoomManager>(
builder: (context, ref, child) {
return GestureDetector(
child: Container(
width: 90.w,
height: 27.w,
decoration: BoxDecoration(
color: Colors.white10,
borderRadius: BorderRadiusDirectional.only(
topEnd: Radius.circular(20.w),
bottomEnd: Radius.circular(20.w),
),
),
alignment: AlignmentDirectional.center,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
"sc_images/room/sc_icon_room_contribute.png",
width: 18.w,
height: 18.w,
),
SizedBox(width: 5.w),
text(
"${ref.roomContributeLevelRes?.thisWeekIntegral ?? 0}",
fontSize: 13.sp,
textColor: Colors.orangeAccent,
fontWeight: FontWeight.w600,
),
Icon(
Icons.chevron_right,
size: 13.w,
color: Colors.orangeAccent,
),
],
),
),
onTap: () {
SmartDialog.show(
tag: "showRoomGiftRankPage",
alignment: Alignment.bottomCenter,
animationType: SmartAnimationType.fade,
builder: (_) {
return RoomGiftRankPage();
},
);
},
);
},
);
}
}