基础页面

This commit is contained in:
2022-10-20 14:21:39 +08:00
parent 49ad269c2b
commit 42ba10ec61
62 changed files with 5132 additions and 54 deletions

View 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'],
);
}

View 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!;
}

View 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';
}

View 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'],
);
}

View 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 '';
}
}

View 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,
});
}

View 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,
});
}

View 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(),
);
}

View 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,
});
}

View 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;
}

View 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'],
);
}

View 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,
});
}