chatapp3-flutter/lib/modules/room/block/blocked_list_page.dart
2026-04-09 21:32:23 +08:00

163 lines
5.0 KiB
Dart

import 'dart:ui' as ui;
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:yumi/app_localizations.dart';
import 'package:yumi/shared/data_sources/sources/repositories/sc_room_repository_imp.dart';
import 'package:yumi/ui_kit/components/sc_page_list.dart';
import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
import 'package:yumi/shared/data_sources/sources/repositories/sc_user_repository_impl.dart';
import 'package:yumi/shared/business_logic/models/res/room_black_list_res.dart';
import 'package:yumi/modules/index/main_route.dart';
///房间用户 黑名单
class BlockedListPage extends SCPageList {
String? roomId;
BlockedListPage({super.key, this.roomId});
@override
_BlockedListPageState createState() => _BlockedListPageState(roomId);
}
class _BlockedListPageState
extends SCPageListState<RoomBlackListRes, BlockedListPage> {
String? roomId;
_BlockedListPageState(this.roomId);
@override
void initState() {
super.initState();
enablePullUp = false;
backgroundColor = Colors.transparent;
isShowDivider = false;
loadData(1);
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12.0),
topRight: Radius.circular(12.0),
),
child: BackdropFilter(
filter: ui.ImageFilter.blur(sigmaX: 15, sigmaY: 15),
child: Container(
width: ScreenUtil().screenWidth,
color: Color(0xff09372E).withOpacity(0.5),
child: Column(
children: [
SizedBox(height: 15.w),
text(
SCAppLocalizations.of(context)!.blockedList,
fontSize: 14.sp,
textColor: Colors.white,
),
SizedBox(height: 10.w),
SizedBox(height: 350.w, child: buildList(context)),
],
),
),
),
),
);
}
@override
Widget buildItem(RoomBlackListRes res) {
return Container(
margin: REdgeInsets.symmetric(vertical: 5.w, horizontal: 10.w),
padding: REdgeInsets.symmetric(vertical: 10.w),
decoration: BoxDecoration(
color: Color(0xffF2F2F2),
borderRadius: BorderRadius.circular(10.w),
),
child: Row(
children: [
SizedBox(width: 10.w),
GestureDetector(
child: ClipOval(
child: CachedNetworkImage(
imageUrl: res.blacklistUserProfile?.userAvatar ?? "",
width: 42.w,
height: 42.w,
),
),
onTap: () {
SCNavigatorUtils.push(
context,
"${SCMainRoute.person}?isMe=${AccountStorage().getCurrentUser()?.userProfile?.id == res.blacklistUserProfile?.id}&tageId=${res.blacklistUserProfile?.id}",
);
},
),
SizedBox(width: 3.w),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
constraints: BoxConstraints(maxWidth: 190.w),
child: text(
res.blacklistUserProfile?.userNickname ?? "",
fontSize: 14.sp,
textColor: Colors.white,
),
),
SizedBox(height: 4.w),
text(
"ID:${res.blacklistUserProfile?.getID()}",
fontSize: 10.sp,
textColor: Colors.white,
),
],
),
),
SizedBox(width: 3.w),
GestureDetector(
child: Image.asset(
"sc_images/room/sc_icon_remve_block.png",
width: 22.w,
height: 22.w,
),
onTap: () {
SCChatRoomRepository()
.removeBlacklist(
res.roomId ?? "",
res.blacklistUserProfile?.id ?? "",
)
.whenComplete(() {
loadData(1);
});
},
),
SizedBox(width: 15.w),
],
),
);
}
///加载数据
@override
loadPage({
required int page,
required Function(List<RoomBlackListRes>) onSuccess,
Function? onErr,
}) async {
try {
var roomList = await SCAccountRepository().roomBlacklist(roomId ?? "", "0");
onSuccess(roomList);
} catch (e) {
if (onErr != null) {
onErr();
}
}
}
}