基础页面
This commit is contained in:
121
lib/models/im/calling_model.dart
Normal file
121
lib/models/im/calling_model.dart
Normal file
@@ -0,0 +1,121 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:chat/models/im/custom_message_model.dart';
|
||||
|
||||
class CallingModel extends CustomMessageModel {
|
||||
CallingModel({
|
||||
this.businessID = CustomMessageType.CALL,
|
||||
required this.callType,
|
||||
required this.inviter,
|
||||
required this.inviteeList,
|
||||
required this.data,
|
||||
required this.timeout,
|
||||
required this.actionType,
|
||||
required this.onlineUserOnly,
|
||||
required this.isGroup,
|
||||
});
|
||||
|
||||
@override
|
||||
String businessID;
|
||||
|
||||
/// 通话类型 videoCall audioCall
|
||||
String callType;
|
||||
|
||||
/// 邀请人
|
||||
String inviter;
|
||||
|
||||
/// 被邀请人
|
||||
List<String> inviteeList;
|
||||
|
||||
/// 通话时长
|
||||
int timeout;
|
||||
// 1: 邀请方发起邀请
|
||||
// 2: 邀请方取消邀请
|
||||
// 3: 被邀请方接受邀请
|
||||
// 4: 被邀请方拒绝邀请
|
||||
// 5: 邀请超时
|
||||
int actionType;
|
||||
|
||||
bool onlineUserOnly;
|
||||
|
||||
/// 是否是群语音
|
||||
bool isGroup;
|
||||
CallingModelData data;
|
||||
|
||||
String get actionTypeText {
|
||||
final actionMessage = {
|
||||
1: "发起通话",
|
||||
2: "取消通话",
|
||||
3: "接受通话",
|
||||
4: "拒绝通话",
|
||||
5: "超时未接听",
|
||||
};
|
||||
return actionMessage[actionType] ?? "";
|
||||
}
|
||||
|
||||
factory CallingModel.fromJson(Map<String, dynamic> json) => CallingModel(
|
||||
callType: jsonDecode(json['data'])['data']['cmd'],
|
||||
inviter: json['inviter'],
|
||||
inviteeList: List<String>.from(
|
||||
json['inviteeList'].map(
|
||||
(x) => x.toString(),
|
||||
),
|
||||
),
|
||||
data: CallingModelData.fromJson(jsonDecode(json['data'])),
|
||||
timeout: json['timeout'],
|
||||
actionType: json['actionType'],
|
||||
onlineUserOnly: json['onlineUserOnly'],
|
||||
isGroup: jsonDecode(json['data'])['is_group'],
|
||||
);
|
||||
|
||||
@override
|
||||
String toJson() {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
class CallingModelData {
|
||||
CallingModelData({
|
||||
required this.version,
|
||||
required this.callType,
|
||||
required this.data,
|
||||
required this.roomId,
|
||||
required this.isGroup,
|
||||
});
|
||||
|
||||
int version;
|
||||
int callType;
|
||||
DataData data;
|
||||
int roomId;
|
||||
bool isGroup;
|
||||
|
||||
factory CallingModelData.fromJson(Map<String, dynamic> json) =>
|
||||
CallingModelData(
|
||||
version: json['version'],
|
||||
callType: json['call_type'],
|
||||
data: DataData.fromJson(json['data']),
|
||||
roomId: json['room_id'],
|
||||
isGroup: json['is_group'],
|
||||
);
|
||||
}
|
||||
|
||||
class DataData {
|
||||
DataData({
|
||||
required this.cmd,
|
||||
required this.roomId,
|
||||
required this.message,
|
||||
required this.cmdInfo,
|
||||
});
|
||||
|
||||
String cmd; // videoCall audioCall
|
||||
int roomId;
|
||||
String message;
|
||||
String cmdInfo;
|
||||
|
||||
factory DataData.fromJson(Map<String, dynamic> json) => DataData(
|
||||
cmd: json['cmd'],
|
||||
roomId: json['room_id'],
|
||||
message: json['message'],
|
||||
cmdInfo: json['cmd_info'],
|
||||
);
|
||||
}
|
||||
21
lib/models/im/contact_info_model.dart
Normal file
21
lib/models/im/contact_info_model.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
import 'package:azlistview/azlistview.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_friend_info.dart';
|
||||
|
||||
class ContactInfoModel extends ISuspensionBean {
|
||||
String name;
|
||||
String userID;
|
||||
String? tagIndex;
|
||||
String? namePinyin;
|
||||
V2TimFriendInfo? friendInfo;
|
||||
|
||||
ContactInfoModel({
|
||||
required this.name,
|
||||
required this.userID,
|
||||
this.tagIndex,
|
||||
this.namePinyin,
|
||||
this.friendInfo,
|
||||
});
|
||||
|
||||
@override
|
||||
String getSuspensionTag() => tagIndex!;
|
||||
}
|
||||
25
lib/models/im/custom_message_model.dart
Normal file
25
lib/models/im/custom_message_model.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
abstract class CustomMessageModel {
|
||||
abstract String businessID;
|
||||
|
||||
String toJson();
|
||||
}
|
||||
|
||||
class CustomMessageType {
|
||||
// ignore: constant_identifier_names
|
||||
static const String NAME_CARD = 'name_card';
|
||||
// ignore: constant_identifier_names
|
||||
static const String GROUP_CARD = 'group_card';
|
||||
// ignore: constant_identifier_names
|
||||
static const String DT_TRANSFER = 'dt_transfer';
|
||||
// ignore: constant_identifier_names
|
||||
static const String TYPING_STATUS = 'user_typing_status';
|
||||
// ignore: constant_identifier_names
|
||||
static const String EVALUATION = 'evaluation';
|
||||
// ignore: constant_identifier_names
|
||||
static const String CALL = '1';
|
||||
}
|
||||
|
||||
class CallingType {
|
||||
static const String audioCall = 'audioCall';
|
||||
static const String videoCall = 'videoCall';
|
||||
}
|
||||
14
lib/models/im/emoji_model.dart
Normal file
14
lib/models/im/emoji_model.dart
Normal file
@@ -0,0 +1,14 @@
|
||||
class EmojiModel {
|
||||
EmojiModel({
|
||||
required this.name,
|
||||
required this.unicode,
|
||||
});
|
||||
|
||||
String name;
|
||||
int unicode;
|
||||
|
||||
factory EmojiModel.fromJson(Map<String, dynamic> json) => EmojiModel(
|
||||
name: json['name'],
|
||||
unicode: json['unicode'],
|
||||
);
|
||||
}
|
||||
29
lib/models/im/evaluation_model.dart
Normal file
29
lib/models/im/evaluation_model.dart
Normal file
@@ -0,0 +1,29 @@
|
||||
import 'package:chat/models/im/custom_message_model.dart';
|
||||
|
||||
class EvaluationModel extends CustomMessageModel {
|
||||
@override
|
||||
String businessID;
|
||||
int version;
|
||||
double score;
|
||||
String comment;
|
||||
|
||||
EvaluationModel({
|
||||
this.businessID = 'evaluation',
|
||||
required this.version,
|
||||
required this.score,
|
||||
required this.comment,
|
||||
});
|
||||
|
||||
factory EvaluationModel.fromJson(Map<String, dynamic> json) =>
|
||||
EvaluationModel(
|
||||
businessID: json['businessID'],
|
||||
version: json['version'],
|
||||
score: double.parse(json['score']),
|
||||
comment: json['comment'],
|
||||
);
|
||||
|
||||
@override
|
||||
String toJson() {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
33
lib/models/im/group_card_model.dart
Normal file
33
lib/models/im/group_card_model.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:chat/models/im/custom_message_model.dart';
|
||||
|
||||
class GroupCardModel extends CustomMessageModel {
|
||||
@override
|
||||
String businessID;
|
||||
String groupID;
|
||||
String groupName;
|
||||
String inviterID;
|
||||
|
||||
GroupCardModel({
|
||||
this.businessID = CustomMessageType.GROUP_CARD,
|
||||
required this.groupID,
|
||||
required this.groupName,
|
||||
required this.inviterID,
|
||||
});
|
||||
|
||||
factory GroupCardModel.fromJson(Map<String, dynamic> json) => GroupCardModel(
|
||||
businessID: json['businessID'],
|
||||
groupID: json['groupID'],
|
||||
groupName: json['groupName'],
|
||||
inviterID: json['inviterID'],
|
||||
);
|
||||
|
||||
@override
|
||||
String toJson() => json.encode({
|
||||
'businessID': businessID,
|
||||
'groupID': groupID,
|
||||
'groupName': groupName,
|
||||
'inviterID': inviterID,
|
||||
});
|
||||
}
|
||||
25
lib/models/im/group_conversation_model.dart
Normal file
25
lib/models/im/group_conversation_model.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_conversation.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_group_info.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_group_member_full_info.dart';
|
||||
|
||||
class GroupConversationModel {
|
||||
String groupID;
|
||||
V2TimGroupInfo? group;
|
||||
List<V2TimGroupMemberFullInfo?>? memberList;
|
||||
List<V2TimGroupMemberFullInfo?>? adminList;
|
||||
V2TimGroupMemberFullInfo? selfInfo;
|
||||
V2TimConversation? conversation;
|
||||
bool isAdmin;
|
||||
bool isOwner;
|
||||
|
||||
GroupConversationModel({
|
||||
required this.groupID,
|
||||
this.group,
|
||||
this.memberList,
|
||||
this.adminList,
|
||||
this.selfInfo,
|
||||
this.conversation,
|
||||
this.isAdmin = false,
|
||||
this.isOwner = false,
|
||||
});
|
||||
}
|
||||
23
lib/models/im/location_model.dart
Normal file
23
lib/models/im/location_model.dart
Normal file
@@ -0,0 +1,23 @@
|
||||
class LocationModel {
|
||||
LocationModel({
|
||||
required this.name,
|
||||
required this.address,
|
||||
required this.list,
|
||||
required this.latitude,
|
||||
required this.longitude,
|
||||
});
|
||||
|
||||
String name;
|
||||
String address;
|
||||
List<dynamic> list;
|
||||
double latitude;
|
||||
double longitude;
|
||||
|
||||
factory LocationModel.fromJson(Map<String, dynamic> json) => LocationModel(
|
||||
name: json['name'],
|
||||
address: json['address'],
|
||||
list: List<dynamic>.from(json['list'].map((x) => x)),
|
||||
latitude: json['latitude'].toDouble(),
|
||||
longitude: json['longitude'].toDouble(),
|
||||
);
|
||||
}
|
||||
33
lib/models/im/name_card_model.dart
Normal file
33
lib/models/im/name_card_model.dart
Normal file
@@ -0,0 +1,33 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:chat/models/im/custom_message_model.dart';
|
||||
|
||||
class NameCardModel extends CustomMessageModel {
|
||||
@override
|
||||
String businessID;
|
||||
String avatar;
|
||||
String userID;
|
||||
String userName;
|
||||
|
||||
NameCardModel({
|
||||
this.businessID = CustomMessageType.NAME_CARD,
|
||||
required this.avatar,
|
||||
required this.userID,
|
||||
required this.userName,
|
||||
});
|
||||
|
||||
factory NameCardModel.fromJson(Map<String, dynamic> json) => NameCardModel(
|
||||
businessID: json['businessID'],
|
||||
avatar: json['avatar'],
|
||||
userID: json['userID'],
|
||||
userName: json['userName'],
|
||||
);
|
||||
|
||||
@override
|
||||
String toJson() => json.encode({
|
||||
'businessID': businessID,
|
||||
'avatar': avatar,
|
||||
'userID': userID,
|
||||
'userName': userName,
|
||||
});
|
||||
}
|
||||
40
lib/models/im/private_conversation_model.dart
Normal file
40
lib/models/im/private_conversation_model.dart
Normal file
@@ -0,0 +1,40 @@
|
||||
// ignore_for_file: constant_identifier_names
|
||||
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_conversation.dart';
|
||||
import 'package:tencent_im_sdk_plugin/models/v2_tim_user_full_info.dart';
|
||||
|
||||
class PrivateConversationModel {
|
||||
String userID;
|
||||
bool isFriend;
|
||||
String friendRemark;
|
||||
V2TimConversation? conversation;
|
||||
V2TimUserFullInfo? userProfile;
|
||||
bool isStaffer;
|
||||
bool allowStranger; // 允许陌生人消息
|
||||
String? shopId; // 他是哪个店铺的客服
|
||||
|
||||
PrivateConversationModel({
|
||||
required this.userID,
|
||||
this.friendRemark = '',
|
||||
this.isFriend = false,
|
||||
this.conversation,
|
||||
this.userProfile,
|
||||
this.isStaffer = false,
|
||||
this.allowStranger = true,
|
||||
this.shopId,
|
||||
});
|
||||
}
|
||||
|
||||
class UserRelationEnum {
|
||||
/// 不是好友
|
||||
static const int V2TIM_FRIEND_RELATION_TYPE_NONE = 0;
|
||||
|
||||
/// 对方在我的好友列表
|
||||
static const int V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST = 1;
|
||||
|
||||
/// 我在对方的好友列表
|
||||
static const int V2TIM_FRIEND_RELATION_TYPE_IN_OTHER_FRIEND_LIST = 2;
|
||||
|
||||
/// 表示对方在我的好友列表中
|
||||
static const int V2TIM_FRIEND_RELATION_TYPE_BOTH_WAY = 3;
|
||||
}
|
||||
18
lib/models/im/search_user_model.dart
Normal file
18
lib/models/im/search_user_model.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
class SearchUserModel {
|
||||
SearchUserModel({
|
||||
required this.userID,
|
||||
required this.nickname,
|
||||
required this.avatar,
|
||||
});
|
||||
|
||||
String userID;
|
||||
String nickname;
|
||||
String avatar;
|
||||
|
||||
factory SearchUserModel.fromJson(Map<String, dynamic> json) =>
|
||||
SearchUserModel(
|
||||
userID: json['user_id'].toString(),
|
||||
nickname: json['nickname'],
|
||||
avatar: json['avatar'],
|
||||
);
|
||||
}
|
||||
32
lib/models/im/transfer_model.dart
Normal file
32
lib/models/im/transfer_model.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:chat/models/im/custom_message_model.dart';
|
||||
|
||||
class TransferModel extends CustomMessageModel {
|
||||
@override
|
||||
String businessID;
|
||||
String amount;
|
||||
int orderId;
|
||||
bool isReceived;
|
||||
|
||||
TransferModel({
|
||||
this.businessID = CustomMessageType.DT_TRANSFER,
|
||||
required this.amount,
|
||||
required this.orderId,
|
||||
this.isReceived = false,
|
||||
});
|
||||
|
||||
factory TransferModel.fromJson(Map<String, dynamic> json) => TransferModel(
|
||||
businessID: json['businessID'],
|
||||
amount: json['amount'],
|
||||
orderId: json['orderId'] ?? 33,
|
||||
);
|
||||
|
||||
@override
|
||||
String toJson() => json.encode({
|
||||
'businessID': businessID,
|
||||
'amount': amount,
|
||||
'orderId': orderId,
|
||||
'isReceived': isReceived,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user