基础页面
This commit is contained in:
241
lib/services/tim/friend_service.dart
Normal file
241
lib/services/tim/friend_service.dart
Normal file
@@ -0,0 +1,241 @@
|
||||
import 'package:azlistview/azlistview.dart';
|
||||
import 'package:chat/models/im/contact_info_model.dart';
|
||||
import 'package:chat/models/im/search_user_model.dart';
|
||||
import 'package:chat/services/tim_service.dart';
|
||||
import 'package:chat/utils/im_tools.dart';
|
||||
import 'package:chat/utils/request/http.dart';
|
||||
import 'package:chat/utils/ui_tools.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:lpinyin/lpinyin.dart';
|
||||
import 'package:tencent_im_sdk_plugin/enum/friend_type_enum.dart';
|
||||
import 'package:tencent_im_sdk_plugin/manager/v2_tim_friendship_manager.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_friend_check_result.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_friend_info.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_friend_info_result.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_user_full_info.dart';
|
||||
|
||||
class TimFriendService extends GetxService {
|
||||
static TimFriendService get to => Get.find<TimFriendService>();
|
||||
|
||||
/// 好友关系
|
||||
V2TIMFriendshipManager get friendshipManager =>
|
||||
TimService.to.instance.v2TIMFriendshipManager;
|
||||
|
||||
/// 好友列表
|
||||
var friends = List<V2TimFriendInfo>.empty(growable: true).obs;
|
||||
|
||||
/// 格式化后的联系人信息
|
||||
var contacts = List<ContactInfoModel>.empty(growable: true).obs;
|
||||
|
||||
Future<void> fetchList() async {
|
||||
var result = await friendshipManager.getFriendList();
|
||||
if (result.code == 0) {
|
||||
friends.value = result.data!;
|
||||
contacts.clear();
|
||||
for (var element in result.data!) {
|
||||
String name = ImTools.parseNicknameFromInfo(element);
|
||||
String pinyin = PinyinHelper.getPinyinE(name);
|
||||
String tag = pinyin.substring(0, 1).toUpperCase();
|
||||
|
||||
if (!RegExp('[A-Z]').hasMatch(tag)) {
|
||||
tag = '#';
|
||||
}
|
||||
|
||||
contacts.add(ContactInfoModel(
|
||||
name: name,
|
||||
userID: element.userID,
|
||||
tagIndex: tag,
|
||||
namePinyin: pinyin,
|
||||
friendInfo: element,
|
||||
));
|
||||
}
|
||||
|
||||
SuspensionUtil.sortListBySuspensionTag(contacts);
|
||||
SuspensionUtil.setShowSuspensionStatus(contacts);
|
||||
}
|
||||
}
|
||||
|
||||
/// 添加好友
|
||||
Future<bool> add(
|
||||
String userID, {
|
||||
String? remark,
|
||||
String? addWording,
|
||||
String? addSource,
|
||||
}) async {
|
||||
var result = await friendshipManager.addFriend(
|
||||
userID: userID,
|
||||
remark: remark,
|
||||
addWording: addWording,
|
||||
addSource: addSource,
|
||||
addType: FriendTypeEnum.V2TIM_FRIEND_TYPE_BOTH,
|
||||
);
|
||||
if (result.code == 0) {
|
||||
if (result.data!.resultCode == 0) {
|
||||
fetchList();
|
||||
return true;
|
||||
} else if (result.data!.resultCode == 30539) {
|
||||
return true;
|
||||
} else if (result.data!.resultCode == 30010) {
|
||||
UiTools.toast('好友数量已达上限');
|
||||
return false;
|
||||
} else {
|
||||
UiTools.toast(
|
||||
result.data!.resultInfo! + result.data!.resultCode.toString());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
UiTools.toast(result.desc);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// 删除双向好友
|
||||
Future<bool> delete(String userID) async {
|
||||
var result = await friendshipManager.deleteFromFriendList(
|
||||
deleteType: FriendTypeEnum.V2TIM_FRIEND_TYPE_BOTH,
|
||||
userIDList: [userID],
|
||||
);
|
||||
|
||||
if (result.code == 0) {
|
||||
fetchList();
|
||||
return result.data!.first.resultCode == 0;
|
||||
} else {
|
||||
UiTools.toast(result.desc);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// 检测好友是否有双向(单向)好友关系。
|
||||
Future<V2TimFriendCheckResult?> check(String userID) async {
|
||||
var result = await friendshipManager.checkFriend(
|
||||
checkType: FriendTypeEnum.V2TIM_FRIEND_TYPE_BOTH,
|
||||
userIDList: [userID],
|
||||
);
|
||||
|
||||
if (result.code == 0) {
|
||||
return result.data!.first;
|
||||
} else {
|
||||
UiTools.toast(result.desc);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// 获取用户资料
|
||||
Future<V2TimUserFullInfo?> userInfo(String userID) async {
|
||||
var result = await TimService.to.instance.getUsersInfo(
|
||||
userIDList: [userID],
|
||||
);
|
||||
|
||||
if (result.code == 0) {
|
||||
return result.data!.first;
|
||||
}
|
||||
|
||||
UiTools.toast(result.desc);
|
||||
return null;
|
||||
}
|
||||
|
||||
/// 获取好友资料
|
||||
Future<V2TimFriendInfoResult?> friendInfo(String userID) async {
|
||||
var result = await friendshipManager.getFriendsInfo(userIDList: [userID]);
|
||||
|
||||
if (result.code == 0) {
|
||||
if (result.data!.isNotEmpty) {
|
||||
return result.data!.first;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
UiTools.toast(result.desc);
|
||||
return null;
|
||||
}
|
||||
|
||||
/// 修改个人资料
|
||||
Future<bool> setSelfInfo({
|
||||
String? nickname,
|
||||
String? avatar,
|
||||
}) async {
|
||||
var result = await TimService.to.instance.setSelfInfo(
|
||||
userFullInfo: V2TimUserFullInfo(
|
||||
nickName: nickname,
|
||||
faceUrl: avatar,
|
||||
),
|
||||
);
|
||||
|
||||
if (result.code == 0) {
|
||||
// TimService.to.fetchSelfInfo();
|
||||
return true;
|
||||
}
|
||||
UiTools.toast(result.desc);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// 设置是否允许陌生人消息
|
||||
Future<bool> allowStrangerMessage() async {
|
||||
var result = await TimService.to.instance.setSelfInfo(
|
||||
userFullInfo: V2TimUserFullInfo(
|
||||
customInfo: {
|
||||
'Stranger': 'TRUE',
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
if (result.code == 0) {
|
||||
return true;
|
||||
}
|
||||
UiTools.toast(result.desc);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// 禁止陌生人消息
|
||||
Future<bool> forbidStrangerMessage() async {
|
||||
var result = await TimService.to.instance.setSelfInfo(
|
||||
userFullInfo: V2TimUserFullInfo(
|
||||
customInfo: {
|
||||
'Stranger': '',
|
||||
},
|
||||
),
|
||||
);
|
||||
if (result.code == 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// 修改好友备注信息
|
||||
Future<bool> setFriendRemark(
|
||||
String userID,
|
||||
String friendRemark,
|
||||
) async {
|
||||
var result = await friendshipManager.setFriendInfo(
|
||||
userID: userID,
|
||||
friendRemark: friendRemark,
|
||||
);
|
||||
|
||||
if (result.code == 0) {
|
||||
return true;
|
||||
}
|
||||
UiTools.toast(result.desc);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// 从服务器查找用户
|
||||
Future<List<SearchUserModel>?> searchUser(String keyword) async {
|
||||
try {
|
||||
var json = await Http.get(
|
||||
'user/search',
|
||||
params: {
|
||||
'keyword': keyword,
|
||||
},
|
||||
);
|
||||
|
||||
return List<SearchUserModel>.from(
|
||||
json.map(
|
||||
(x) => SearchUserModel.fromJson(x),
|
||||
),
|
||||
);
|
||||
} catch (err) {
|
||||
UiTools.toast(err.toString());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user