import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:loopin/IM/im_service.dart'; import 'package:shirne_dialog/shirne_dialog.dart'; import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; class ImUserInfoController extends GetxController { @override void onInit() { super.onInit(); refreshUserInfo(); logger.i('IM用户信息初始化'); } V2TimUserFullInfo? rawUserInfo; final userID = ''.obs; final nickname = ''.obs; final faceUrl = ''.obs; final signature = ''.obs; final gender = 0.obs; final allowType = 0.obs; final customInfo = { "coverBg": "", "area": "", "areaCode": "", "openId": "", }.obs; final role = 0.obs; final level = 0.obs; final birthday = 0.obs; void init(V2TimUserFullInfo userInfo) { logger.i(userInfo.toJson()); rawUserInfo = userInfo; userID.value = userInfo.userID ?? ''; nickname.value = userInfo.nickName ?? ''; faceUrl.value = userInfo.faceUrl ?? ''; signature.value = userInfo.selfSignature ?? ''; gender.value = userInfo.gender ?? 0; allowType.value = userInfo.allowType ?? 0; customInfo.assignAll(userInfo.customInfo ?? { "coverBg": "", "area": "", "areaCode": "", "openId": "", }); role.value = userInfo.role ?? 0; level.value = userInfo.level ?? 0; birthday.value = userInfo.birthday ?? 0; } void refreshUserInfo() async { try { final updatedUserInfo = await ImService.instance.selfInfo(); if (updatedUserInfo.success) { init(updatedUserInfo.data); } } catch (e) { logger.e('刷新用户信息失败: $e'); } } /// 更新昵称 Future updateNickname(newnickname) async { final res = await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(nickName: newnickname)); if (res.success) { nickname.value = newnickname; } else { logger.i(res.desc); if (res.code == 80001) { MyDialog.toast('昵称违规', icon: Icon(Icons.warning), style: ToastStyle(backgroundColor: Colors.red.withAlpha(200))); } } return res.success; } /// 更新简介 Future updateSignature(newsignature) async { final res = await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(selfSignature: newsignature)); if (res.success) { signature.value = newsignature; } else { logger.i(res.desc); if (res.code == 80001) { MyDialog.toast('简介内容违规', icon: Icon(Icons.warning), style: ToastStyle(backgroundColor: Colors.red.withAlpha(200))); } } return res.success; } /// 更新头像 Future updateFaceUrl() async { if (faceUrl.value.trim().isEmpty) return; await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(faceUrl: faceUrl.value)); } /// 更新背景图 Future updateCover() async { final coverBg = customInfo['coverBg']; if (coverBg == null || coverBg.trim().isEmpty) return; await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(customInfo: customInfo)); } /// 更新openId Future updateOpenId() async { final openId = customInfo['openId']; if (openId == null || openId.trim().isEmpty) return; await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(customInfo: customInfo)); } // customInfo.update("coverBg", (value) => coverBgUrl); /// 更新所在地 Future updateArea() async { final area = customInfo['area']; if (area == null || area.trim().isEmpty) return; final areaCode = customInfo['areaCode']; if (areaCode == null || areaCode.trim().isEmpty) return; await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(customInfo: customInfo)); } ///更新生日 Future updateBirthday() async { if (birthday.value < 0) return; await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(birthday: birthday.value)); } ///更新性别 Future updateGender() async { if (gender.value < 0) return; await ImService.instance.setSelfInfo(userFullInfo: V2TimUserFullInfo(gender: gender.value)); } /// updateAvatar、updateSignature 等方法 }