2026-07-01 18:25:58 +08:00

341 lines
12 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:aslan/chatvibe_core/utilities/at_loading_manager.dart';
import 'package:aslan/chatvibe_data/sources/repositories/user_repository_impl.dart';
import 'package:provider/provider.dart';
import 'package:aslan/app_localizations.dart';
import 'package:aslan/chatvibe_ui/components/appbar/chatvibe_appbar.dart';
import 'package:aslan/chatvibe_ui/components/at_compontent.dart';
import 'package:aslan/chatvibe_ui/components/chatvibe_gradient_button.dart';
import 'package:aslan/chatvibe_ui/components/text/at_text.dart';
import 'package:aslan/chatvibe_core/routes/at_fluro_navigator.dart';
import 'package:aslan/chatvibe_data/sources/local/user_manager.dart';
import 'package:aslan/chatvibe_ui/components/dialog/dialog_base.dart';
import 'package:aslan/chatvibe_ui/components/at_page_list.dart';
import 'package:aslan/chatvibe_core/constants/at_room_msg_type.dart';
import 'package:aslan/chatvibe_data/models/message/big_broadcast_group_message.dart';
import 'package:aslan/chatvibe_data/models/message/at_floating_message.dart';
import 'package:aslan/chatvibe_domain/models/res/follow_user_res.dart';
import 'package:aslan/chatvibe_managers/rtc_manager.dart';
import 'package:aslan/chatvibe_managers/rtm_manager.dart';
import 'package:aslan/chatvibe_features/index/main_route.dart';
class InvGamePage extends ATPageList {
@override
_InvGamePageState createState() => _InvGamePageState();
}
class _InvGamePageState extends ATPageListState<FollowUserRes, InvGamePage>
with SingleTickerProviderStateMixin {
final TextEditingController _textEditingController = TextEditingController();
String? lastId;
@override
void initState() {
super.initState();
enablePullUp = true;
backgroundColor = Colors.transparent;
loadData(1);
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Image.asset(
"atu_images/index/at_icon_coupon_head_bg.png",
width: ScreenUtil().screenWidth,
height: 150.w,
fit: BoxFit.fill,
),
Scaffold(
backgroundColor: Colors.transparent,
resizeToAvoidBottomInset: false,
appBar: ChatVibeStandardAppBar(
title: ATAppLocalizations.of(context)!.fansList,
actions: [],
),
body: SafeArea(
top: false,
child: Container(
margin: EdgeInsetsDirectional.only(top: 15.w),
width: ScreenUtil().screenWidth,
height: ScreenUtil().screenHeight,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadiusDirectional.only(
topStart: Radius.circular(35.w),
),
),
child: Column(
children: [
SizedBox(height: 10.w),
Row(
children: <Widget>[
SizedBox(width: 10.w),
Expanded(
child: searchWidget(
hint: ATAppLocalizations.of(context)!.searchUserId,
controller: _textEditingController,
borderColor: Colors.black12,
textColor: Colors.grey,
),
),
chatvibeGradientButton(
text: ATAppLocalizations.of(context)!.search,
radius: 25,
textSize: 14.sp,
textColor: Colors.black,
gradient: LinearGradient(
colors: [Colors.transparent, Colors.transparent],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
onPress: () {
if (_textEditingController.text.isNotEmpty) {
_searchUser();
}else{
ATLoadingManager.exhibitOperation();
loadData(1);
}
},
),
SizedBox(width: 10.w),
],
),
SizedBox(height: 8.w,),
Expanded(child: buildList(context)),
],
),
),
),
),
],
);
}
@override
Widget buildItem(FollowUserRes res) {
return GestureDetector(
child: Container(
decoration: BoxDecoration(),
child: Row(
children: [
SizedBox(width: 10.w),
GestureDetector(onTap: (){
ATNavigatorUtils.push(
context,
"${MainRoute.person}?isMe=${AccountStorage().getCurrentUser()?.userProfile?.id == res.userProfile?.id}&tageId=${res.userProfile?.id}",
);
},child: head(
url: res.userProfile?.userAvatar ?? "",
width: 55.w,
headdress: res.userProfile?.getHeaddress()?.sourceUrl,
),),
SizedBox(width: 5.w),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
chatvibeNickNameText(
res.userProfile
?.userNickname ??
"",
fontSize: 14.sp,
textColor: Colors.black,
type:
res.userProfile
?.getVIP()
?.name ??
"",
needScroll:
( res.userProfile
?.userNickname
?.characters.length ??
0) >
22,
),
Row(
children: [
Container(
height: 35.w,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
(res.userProfile?.hasSpecialId() ?? false)
? "atu_images/general/at_icon_special_id_bg.png"
: "atu_images/general/at_icon_id_bg.png",
),
fit: BoxFit.contain,
),
),
child: Row(
textDirection: TextDirection.ltr,
children: [
SizedBox(width: 38.w),
text(
"${res.userProfile?.getID()}",
fontSize: 12.sp,
textColor: Colors.white,
fontWeight: FontWeight.bold,
),
SizedBox(width: 5.w),
Image.asset(
"atu_images/room/at_icon_user_card_copy_id.png",
width: 12.w,
height: 12.w,
),
SizedBox(width: 8.w),
],
),
),
SizedBox(width: 12.w),
Container(
width: (res.userProfile?.age ?? 0) > 999 ? 58.w : 48.w,
height: 24.w,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
res.userProfile?.userSex == 0
? "atu_images/login/at_icon_sex_woman_bg.png"
: "atu_images/login/at_icon_sex_man_bg.png",
),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
xb(res.userProfile?.userSex),
text(
"${res.userProfile?.age}",
textColor: Colors.white,
fontSize: 15.sp,
fontWeight: FontWeight.w600,
),
SizedBox(width: 3.w),
],
),
),
SizedBox(width: 8.w),
getWealthLevel(
res.userProfile?.wealthLevel ?? 0,
width: 58.w,
height: 30.w,
),
SizedBox(width: 8.w),
getUserLevel(
res.userProfile?.charmLevel ?? 0,
width: 58.w,
height: 30.w,
),
],
),
],
),
),
SizedBox(width: 15.w),
],
),
),
onTap: () {
_showSendConfirm(res.userProfile?.account??"",res.userProfile?.id??"");
},
);
}
void _searchUser() async {
try {
ATLoadingManager.exhibitOperation();
items.clear();
var result = await AccountRepository().fansMyList(
account: _textEditingController.text,
);
items.addAll(result);
ATLoadingManager.veilRoutine();
setState(() {});
} catch (e) {
ATLoadingManager.veilRoutine();
}
}
@override
builderDivider() {
// return Divider(
// height: 1.w,
// color: Color(0xff3D3277).withOpacity(0.5),
// indent: 15.w,
// );
return Container(height: 8.w);
}
///加载数据
@override
loadPage({
required int page,
required Function(List<FollowUserRes>) onSuccess,
Function? onErr,
}) async {
if (page == 1) {
lastId = null;
}
try {
var fansList = await AccountRepository().fansMyList(lastId: lastId);
ATLoadingManager.veilRoutine();
if (fansList.isNotEmpty) {
lastId = fansList.last.id;
}
onSuccess(fansList);
} catch (e) {
ATLoadingManager.veilRoutine();
if (onErr != null) {
onErr();
}
}
}
void _showSendConfirm(String account,String userId) {
SmartDialog.show(
tag: "showConfirmDialog",
alignment: Alignment.center,
animationType: SmartAnimationType.fade,
builder: (_) {
return MsgDialog(
title: ATAppLocalizations.of(context)!.tips,
msg: ATAppLocalizations.of(
context,
)!.confirmInviteThisUserToTheRoom("$account"),
btnText: ATAppLocalizations.of(context)!.confirm,
onEnsure: () {
BigBroadcastGroupMessage msg = BigBroadcastGroupMessage(
ATRoomMsgType.inviteRoom,
ATFloatingMessage(
userId: AccountStorage().getCurrentUser()?.userProfile?.account,
toUserId: userId,
userAvatarUrl:
AccountStorage().getCurrentUser()?.userProfile?.userAvatar ??
"",
roomId:
Provider.of<RtcProvider>(
context,
listen: false,
).currenRoom?.roomProfile?.roomProfile?.id ??
"",
),
);
Provider.of<RtmProvider>(
context,
listen: false,
).sendBigBroadcastGroup(msg);
SmartDialog.dismiss(tag: "showConfirmDialog");
},
);
},
);
}
}