Files
zh-chat-flutter/lib/utils/im_tools.dart
2022-10-20 14:21:39 +08:00

252 lines
7.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:convert';
import 'package:azlistview/azlistview.dart';
import 'package:chat/configs/app_colors.dart';
import 'package:chat/models/im/custom_message_model.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tencent_im_sdk_plugin/enum/group_change_info_type.dart';
import 'package:tencent_im_sdk_plugin/enum/group_tips_elem_type.dart';
import 'package:tencent_im_sdk_plugin/enum/message_elem_type.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_message.dart';
class ImTools {
static String parseNicknameFromResult(V2TimFriendInfoResult? infoResult) {
if (infoResult == null) {
return '';
}
if (infoResult.friendInfo!.friendRemark != null) {
if (infoResult.friendInfo!.friendRemark! == '') {
return infoResult.friendInfo!.userProfile!.nickName!;
} else {
return infoResult.friendInfo!.friendRemark!;
}
}
return infoResult.friendInfo!.userProfile!.nickName!;
}
static String parseNicknameFromInfo(V2TimFriendInfo infoResult) {
if (infoResult.friendRemark != '') {
return infoResult.friendRemark!;
}
return infoResult.userProfile!.nickName!;
}
static parseMessage(V2TimMessage? message) {
String text = '';
switch (message?.elemType) {
case MessageElemType.V2TIM_ELEM_TYPE_TEXT:
text = message!.textElem!.text!;
break;
case MessageElemType.V2TIM_ELEM_TYPE_IMAGE:
text = '[图片]';
break;
case MessageElemType.V2TIM_ELEM_TYPE_SOUND:
text = '[语音]';
break;
case MessageElemType.V2TIM_ELEM_TYPE_VIDEO:
text = '[视频]';
break;
case MessageElemType.V2TIM_ELEM_TYPE_FILE:
text = '[文件]';
break;
case MessageElemType.V2TIM_ELEM_TYPE_LOCATION:
text = '[位置]';
break;
case MessageElemType.V2TIM_ELEM_TYPE_FACE:
text = '[表情]';
break;
case MessageElemType.V2TIM_ELEM_TYPE_MERGER:
text = '[聊天记录]';
break;
case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM:
var data = json.decode(message!.customElem!.data!);
switch (data['businessID']) {
case CustomMessageType.CALL:
text = '通话';
break;
case CustomMessageType.DT_TRANSFER:
text = '[转账]';
break;
case CustomMessageType.NAME_CARD:
text = '[名片]';
break;
case CustomMessageType.GROUP_CARD:
text = '[群名片]';
break;
case CustomMessageType.EVALUATION:
text = '[评价]';
break;
default:
text = '[${data['businessID']}]';
}
break;
case MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS:
switch (message?.groupTipsElem!.type) {
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_JOIN:
text = '加入群聊';
break;
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_INVITE:
text = '邀请入群';
break;
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_QUIT:
text = '退出群聊';
break;
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_KICKED:
text = '踢出群聊';
break;
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_SET_ADMIN:
text = '设置管理';
break;
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_CANCEL_ADMIN:
text = '取消管理';
break;
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_GROUP_INFO_CHANGE:
// (opMember 修改群资料groupName & introduction & notification & faceUrl & owner & custom)
switch (message!.groupTipsElem!.groupChangeInfoList![0]!.type) {
case GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_NAME:
text = '修改群名称';
break;
case GroupChangeInfoType
.V2TIM_GROUP_INFO_CHANGE_TYPE_INTRODUCTION:
text = '群简介修改';
break;
case GroupChangeInfoType
.V2TIM_GROUP_INFO_CHANGE_TYPE_NOTIFICATION:
text = '修改群公告';
break;
case GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_FACE_URL:
text = '群头像修改';
break;
case GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER:
text = '群主变更';
break;
case GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_CUSTOM:
text = '群自定义字段变更';
break;
default:
text = message.groupTipsElem!.groupChangeInfoList![0]!.type
.toString();
break;
}
break;
case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_MEMBER_INFO_CHANGE:
text = '群成员资料变更';
break;
default:
text = message!.groupTipsElem!.type.toString();
}
break;
default:
text = message!.elemType.toString();
}
return text;
}
/// 右侧索引栏样式
static const IndexBarOptions indexBarOptions = IndexBarOptions(
needRebuild: true,
ignoreDragCancel: true,
downTextStyle: TextStyle(
fontSize: 12,
color: Colors.white,
),
downItemDecoration: BoxDecoration(
shape: BoxShape.circle,
color: AppColors.primary,
),
indexHintWidth: 120 / 2,
indexHintHeight: 100 / 2,
indexHintDecoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'assets/chats/index_bar.png',
),
fit: BoxFit.contain,
),
),
indexHintAlignment: Alignment.centerRight,
indexHintChildAlignment: Alignment(
-0.25,
0.0,
),
indexHintOffset: Offset(
-20,
0,
),
);
/// 悬浮导航显示ABCD~Z
static Widget susItem(
BuildContext context,
String tag, {
double susHeight = 40,
}) {
return Container(
height: susHeight,
width: MediaQuery.of(context).size.width,
padding: const EdgeInsets.only(
left: 16.0,
),
color: Colors.grey[200],
alignment: Alignment.centerLeft,
child: Text(
tag,
),
);
}
static showTrtcMessage(String userID) {
return showModalBottomSheet(
context: Get.context!,
isScrollControlled: true,
backgroundColor: AppColors.white,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(8)),
),
builder: (context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
// PopMenuItem(
// '语音通话',
// onTap: () {
// TimService.to.tuiCalling.call(userID, CallingScenes.Audio);
// Get.back();
// },
// ),
// const Divider(height: 0),
// PopMenuItem(
// '视频通话',
// onTap: () {
// TimService.to.tuiCalling.call(userID, CallingScenes.Video);
// Get.back();
// },
// ),
const Divider(height: 0),
Container(
height: 8,
color: AppColors.page,
),
const Divider(height: 0),
// PopMenuItem(
// '取消',
// onTap: () {
// Get.back();
// },
// ),
],
);
},
);
}
}