You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
3.8 KiB
151 lines
3.8 KiB
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:im_flutter_sdk/im_flutter_sdk.dart';
|
|
|
|
import '../../im/im_manager.dart';
|
|
import '../../pages/home/report_page.dart';
|
|
|
|
class ChatSettingsController extends GetxController {
|
|
final String userId;
|
|
|
|
// 用户信息
|
|
final Rx<EMUserInfo?> userInfo = Rx<EMUserInfo?>(null);
|
|
|
|
// 是否拉黑
|
|
final RxBool isBlacklisted = RxBool(false);
|
|
|
|
// 是否关注
|
|
final RxBool isFollowing = RxBool(false);
|
|
|
|
// 备注名
|
|
final RxString remark = RxString('');
|
|
|
|
ChatSettingsController({required this.userId});
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
// 初始化时获取用户信息
|
|
fetchUserInfo();
|
|
// 检查黑名单状态
|
|
checkBlacklistStatus();
|
|
// 检查关注状态
|
|
checkFollowStatus();
|
|
}
|
|
|
|
/// 获取用户信息
|
|
Future<void> fetchUserInfo() async {
|
|
try {
|
|
final EMUserInfo? info = await IMManager.instance.getUserInfo(userId);
|
|
if (info != null) {
|
|
userInfo.value = info;
|
|
if (Get.isLogEnable) {
|
|
Get.log('获取用户信息成功: ${info.nickName}');
|
|
}
|
|
} else {
|
|
if (Get.isLogEnable) {
|
|
Get.log('未找到用户信息: $userId');
|
|
}
|
|
}
|
|
} catch (e) {
|
|
if (Get.isLogEnable) {
|
|
Get.log('获取用户信息失败: $e');
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 检查黑名单状态
|
|
Future<void> checkBlacklistStatus() async {
|
|
try {
|
|
// 从服务器获取黑名单列表
|
|
final blacklist = await IMManager.instance.getBlacklist();
|
|
isBlacklisted.value = blacklist.contains(userId);
|
|
} catch (e) {
|
|
if (Get.isLogEnable) {
|
|
Get.log('检查黑名单状态失败: $e');
|
|
}
|
|
isBlacklisted.value = false;
|
|
}
|
|
}
|
|
|
|
/// 检查关注状态
|
|
Future<void> checkFollowStatus() async {
|
|
try {
|
|
// TODO: 调用实际的API检查关注状态
|
|
// 这里暂时模拟
|
|
isFollowing.value = false;
|
|
} catch (e) {
|
|
if (Get.isLogEnable) {
|
|
Get.log('检查关注状态失败: $e');
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 切换黑名单状态
|
|
Future<void> toggleBlacklist(bool value) async {
|
|
try {
|
|
if (value) {
|
|
// 加入黑名单
|
|
await IMManager.instance.addToBlacklist(userId);
|
|
isBlacklisted.value = true;
|
|
SmartDialog.showToast('已加入黑名单');
|
|
} else {
|
|
// 移出黑名单
|
|
await IMManager.instance.removeFromBlacklist(userId);
|
|
isBlacklisted.value = false;
|
|
SmartDialog.showToast('已移出黑名单');
|
|
}
|
|
update();
|
|
} catch (e) {
|
|
if (Get.isLogEnable) {
|
|
Get.log('操作黑名单失败: $e');
|
|
}
|
|
SmartDialog.showToast('操作失败,请重试');
|
|
}
|
|
}
|
|
|
|
/// 切换关注状态
|
|
Future<void> toggleFollow() async {
|
|
try {
|
|
if (isFollowing.value) {
|
|
// 取消关注
|
|
// TODO: 调用实际的取消关注API
|
|
isFollowing.value = false;
|
|
SmartDialog.showToast('已取消关注');
|
|
} else {
|
|
// 关注
|
|
// TODO: 调用实际的关注API
|
|
isFollowing.value = true;
|
|
SmartDialog.showToast('已关注');
|
|
}
|
|
update();
|
|
} catch (e) {
|
|
if (Get.isLogEnable) {
|
|
Get.log('操作关注失败: $e');
|
|
}
|
|
SmartDialog.showToast('操作失败,请重试');
|
|
}
|
|
}
|
|
|
|
/// 设置备注名
|
|
Future<void> setRemark(String newRemark) async {
|
|
try {
|
|
// TODO: 调用实际的设置备注名API
|
|
remark.value = newRemark;
|
|
SmartDialog.showToast('备注名设置成功');
|
|
update();
|
|
} catch (e) {
|
|
if (Get.isLogEnable) {
|
|
Get.log('设置备注名失败: $e');
|
|
}
|
|
SmartDialog.showToast('设置失败,请重试');
|
|
}
|
|
}
|
|
|
|
/// 举报用户
|
|
void reportUser() {
|
|
// 跳转到举报页面
|
|
Get.to(() => ReportPage());
|
|
}
|
|
}
|
|
|