2023-07-27 18:17:52 +08:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
class FriendSetting {
|
|
|
|
String friendRemark = '';
|
|
|
|
String friendGroup = '';
|
|
|
|
|
2023-08-03 15:51:18 +08:00
|
|
|
FriendSetting.fromJson(Map json) {
|
2023-07-27 18:17:52 +08:00
|
|
|
friendRemark = json['friendRemark'] ?? '';
|
2023-08-01 10:01:08 +08:00
|
|
|
friendGroup = json['friendGroup'] ?? '我的好友';
|
2023-07-27 18:17:52 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class GroupChatSetting {
|
2023-09-18 19:32:04 +08:00
|
|
|
String groupChatRemark = '';
|
|
|
|
String remarkInGroupChat = '';
|
2023-07-27 18:17:52 +08:00
|
|
|
|
|
|
|
GroupChatSetting.fromJson(Map<String, dynamic> json) {
|
2023-09-18 19:32:04 +08:00
|
|
|
groupChatRemark = json['groupChatRemark'] ?? '';
|
|
|
|
remarkInGroupChat = json['remarkInGroupChat'] ?? '';
|
2023-07-27 18:17:52 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class Contact extends ChangeNotifier {
|
|
|
|
Map<String, FriendSetting> friends = {};
|
|
|
|
List<String> friendGroups = [];
|
|
|
|
Map<String, GroupChatSetting> groupChats = {};
|
2023-09-09 16:48:47 +08:00
|
|
|
String defaultGroup = '';
|
2023-08-12 18:31:37 +08:00
|
|
|
int friendCount = 0;
|
2023-08-23 16:30:41 +08:00
|
|
|
int groupChatCount = 0;
|
2023-07-27 18:17:52 +08:00
|
|
|
|
2023-08-01 10:01:08 +08:00
|
|
|
void init(Map json) {
|
|
|
|
defaultGroup = json['defaultGroup'];
|
2023-08-12 18:31:37 +08:00
|
|
|
friendCount = 0;
|
2023-08-23 16:30:41 +08:00
|
|
|
groupChatCount = 0;
|
2023-08-01 10:01:08 +08:00
|
|
|
|
|
|
|
json['friends'].forEach((key, value) {
|
2023-08-12 18:31:37 +08:00
|
|
|
friendCount += 1;
|
2023-07-27 18:17:52 +08:00
|
|
|
friends[key] = FriendSetting.fromJson(value);
|
|
|
|
});
|
2023-08-23 16:30:41 +08:00
|
|
|
json['groupChats'].forEach((key, value) {
|
|
|
|
groupChats[key] = GroupChatSetting.fromJson(value);
|
|
|
|
groupChatCount += 1;
|
|
|
|
});
|
|
|
|
|
2023-08-03 15:51:18 +08:00
|
|
|
friendGroups = List.from(json['friendGroups']);
|
2023-08-01 10:01:08 +08:00
|
|
|
}
|
2023-07-27 18:17:52 +08:00
|
|
|
|
2023-08-01 10:01:08 +08:00
|
|
|
Map<String, FriendSetting> filterGroupFriends(String groupName) {
|
|
|
|
Map<String, FriendSetting> groupFriends = {};
|
|
|
|
friends.forEach((key, value) {
|
|
|
|
if (value.friendGroup == groupName) {
|
|
|
|
groupFriends[key] = value;
|
|
|
|
}
|
2023-07-27 18:17:52 +08:00
|
|
|
});
|
2023-08-01 10:01:08 +08:00
|
|
|
return groupFriends;
|
|
|
|
}
|
2023-07-27 18:17:52 +08:00
|
|
|
|
2023-08-03 15:51:18 +08:00
|
|
|
void addFriend(String friendId, Map friendSetting) {
|
2023-08-12 18:31:37 +08:00
|
|
|
friends[friendId] = FriendSetting.fromJson(friendSetting);
|
|
|
|
friendCount += 1;
|
2023-08-03 15:51:18 +08:00
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2023-08-01 10:01:08 +08:00
|
|
|
void changeFriendRemark(String friendId, String remark) {
|
|
|
|
friends[friendId]!.friendRemark = remark;
|
|
|
|
}
|
|
|
|
|
|
|
|
void changeFriendGroup(String friendId, String group) {
|
|
|
|
friends[friendId]!.friendGroup = group;
|
|
|
|
}
|
|
|
|
|
2023-08-03 15:51:18 +08:00
|
|
|
void removeFriend(String friendId) {
|
|
|
|
friends.remove(friendId);
|
2023-08-12 18:31:37 +08:00
|
|
|
friendCount -= 1;
|
2023-08-03 15:51:18 +08:00
|
|
|
notifyListeners();
|
2023-08-01 10:01:08 +08:00
|
|
|
}
|
2023-08-23 16:30:41 +08:00
|
|
|
|
|
|
|
void addGroupChat(String groupChatId) {
|
2023-10-21 21:25:09 +08:00
|
|
|
groupChats[groupChatId] = GroupChatSetting.fromJson(
|
|
|
|
{'groupChatRemark': '', 'remarkInGroupChat': ''});
|
2023-08-23 16:30:41 +08:00
|
|
|
groupChatCount += 1;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
2023-08-27 10:18:31 +08:00
|
|
|
|
|
|
|
void changeGroupChatSetting(
|
|
|
|
String setting,
|
|
|
|
String groupChatId,
|
|
|
|
String newValue,
|
|
|
|
) {
|
|
|
|
switch (setting) {
|
2023-09-18 19:32:04 +08:00
|
|
|
case 'groupChatRemark':
|
|
|
|
groupChats[groupChatId]!.groupChatRemark = newValue;
|
2023-08-27 10:18:31 +08:00
|
|
|
break;
|
2023-09-18 19:32:04 +08:00
|
|
|
case 'remarkInGroupChat':
|
|
|
|
groupChats[groupChatId]!.remarkInGroupChat = newValue;
|
2023-08-27 10:18:31 +08:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
void deleteGroupChat(String groupChatId) {
|
|
|
|
groupChats.remove(groupChatId);
|
|
|
|
groupChatCount--;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
2023-08-27 19:14:37 +08:00
|
|
|
|
2023-09-09 16:48:47 +08:00
|
|
|
void clear() {
|
|
|
|
friends.clear();
|
|
|
|
friendGroups.clear();
|
|
|
|
groupChats.clear();
|
2023-08-27 19:14:37 +08:00
|
|
|
defaultGroup = '';
|
|
|
|
friendCount = 0;
|
|
|
|
groupChatCount = 0;
|
|
|
|
}
|
2023-08-01 10:01:08 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
class FriendAccountProfile {
|
|
|
|
String id = '';
|
|
|
|
String username = '';
|
|
|
|
String email = '';
|
|
|
|
String nickname = '';
|
|
|
|
String gender = '';
|
|
|
|
String birthday = '';
|
|
|
|
String location = '';
|
|
|
|
String status = '';
|
|
|
|
String sign = '';
|
|
|
|
String avatar = '';
|
|
|
|
|
|
|
|
FriendAccountProfile.fromJson(Map<String, dynamic> json) {
|
|
|
|
username = json['username'];
|
|
|
|
email = json['email'];
|
|
|
|
nickname = json['nickname'] ?? '';
|
|
|
|
birthday = json['birthday'] ?? '';
|
|
|
|
location = json['location'] ?? '';
|
|
|
|
status = json['status'] ?? '';
|
|
|
|
sign = json['sign'] ?? '';
|
2023-10-21 21:25:09 +08:00
|
|
|
gender = _genderEn2Cn(json['gender'] ?? '');
|
2023-08-01 10:01:08 +08:00
|
|
|
avatar = json['avatar'] ?? '';
|
|
|
|
}
|
2023-10-21 21:25:09 +08:00
|
|
|
|
|
|
|
Map<String, String> toMapCn() {
|
|
|
|
return {
|
|
|
|
'账号': username,
|
|
|
|
'邮箱': email,
|
|
|
|
'签名': sign,
|
|
|
|
'状态': status,
|
|
|
|
'名字': nickname,
|
|
|
|
'生日': birthday.isNotEmpty
|
|
|
|
? '${birthday.substring(0, 4)}年${birthday.substring(5, 7)}月${birthday.substring(8)}日'
|
|
|
|
: '',
|
|
|
|
'位置': location,
|
|
|
|
'性别': gender,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
String _genderEn2Cn(String newGender) {
|
|
|
|
if (newGender.isEmpty) {
|
|
|
|
return newGender;
|
|
|
|
} else {
|
|
|
|
return newGender == 'man' ? '男' : '女';
|
|
|
|
}
|
|
|
|
}
|
2023-08-01 10:01:08 +08:00
|
|
|
}
|
|
|
|
|
2023-08-23 16:30:41 +08:00
|
|
|
class GroupChatProfile {
|
|
|
|
String id = '';
|
|
|
|
String name = '';
|
|
|
|
String supervisor = '';
|
|
|
|
List<String> administrators = [];
|
|
|
|
List<String> members = [];
|
|
|
|
String introduction = '';
|
|
|
|
List noticeboard = [];
|
|
|
|
List<String> tags = [];
|
|
|
|
String avatar = '';
|
|
|
|
|
|
|
|
GroupChatProfile.fromJson(Map<String, dynamic> json) {
|
|
|
|
name = json['name'];
|
|
|
|
supervisor = json['supervisor'];
|
|
|
|
administrators = List.from(json['administrators']);
|
|
|
|
members = List.from(json['members']);
|
|
|
|
introduction = json['introduction'] ?? '';
|
|
|
|
noticeboard = json['noticeboard'] ?? [];
|
|
|
|
tags = List.from(json['tags']);
|
|
|
|
avatar = json['avatar'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class GroupChatMemberNameAvatar {
|
2023-09-18 19:32:04 +08:00
|
|
|
String remarkInGroupChat = '';
|
2023-08-23 16:30:41 +08:00
|
|
|
String nickname = '';
|
|
|
|
String avatar = '';
|
|
|
|
|
|
|
|
GroupChatMemberNameAvatar.fromJson(Map<String, dynamic> json) {
|
2023-09-18 19:32:04 +08:00
|
|
|
remarkInGroupChat = json['remarkInGroupChat'] ?? '';
|
2023-08-23 16:30:41 +08:00
|
|
|
nickname = json['nickname'] ?? '';
|
|
|
|
avatar = json['avatar'] ?? '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-01 10:01:08 +08:00
|
|
|
class ContactAccountProfile extends ChangeNotifier {
|
|
|
|
Map<String, FriendAccountProfile> friends = {};
|
2023-08-23 16:30:41 +08:00
|
|
|
Map<String, GroupChatProfile> groupChats = {};
|
2023-10-21 21:25:09 +08:00
|
|
|
Map<String, Map<String, GroupChatMemberNameAvatar>> groupChatMemberProfiles =
|
2023-08-27 10:18:31 +08:00
|
|
|
{};
|
2023-08-01 10:01:08 +08:00
|
|
|
|
|
|
|
void init(Map json) {
|
|
|
|
json['friends'].forEach((key, value) {
|
|
|
|
friends[key] = FriendAccountProfile.fromJson(value);
|
|
|
|
});
|
2023-08-23 16:30:41 +08:00
|
|
|
|
|
|
|
json['groupChats'].forEach((key, value) {
|
|
|
|
groupChats[key] = GroupChatProfile.fromJson(value);
|
|
|
|
});
|
2023-07-27 18:17:52 +08:00
|
|
|
}
|
2023-08-03 15:51:18 +08:00
|
|
|
|
|
|
|
(bool, String) getIdBy(String condition, String filterValue) {
|
|
|
|
String friendId = '';
|
|
|
|
switch (condition) {
|
|
|
|
case 'username':
|
|
|
|
for (var key in friends.keys) {
|
|
|
|
if (friends[key]!.username == filterValue) {
|
|
|
|
friendId = key;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return friendId.isNotEmpty ? (true, friendId) : (false, '');
|
|
|
|
}
|
|
|
|
|
2023-08-23 16:30:41 +08:00
|
|
|
void addFriendAccountProfile(String friendId, Map<String, dynamic> json) {
|
2023-08-11 23:02:31 +08:00
|
|
|
friends.addAll({friendId: FriendAccountProfile.fromJson(json)});
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2023-08-03 15:51:18 +08:00
|
|
|
void removeFriend(String friendId) {
|
|
|
|
friends.remove(friendId);
|
2023-08-11 23:02:31 +08:00
|
|
|
notifyListeners();
|
2023-08-03 15:51:18 +08:00
|
|
|
}
|
2023-08-23 16:30:41 +08:00
|
|
|
|
|
|
|
void addGroupChatProfile(String groupChatId, Map<String, dynamic> json) {
|
|
|
|
groupChats.addAll({groupChatId: GroupChatProfile.fromJson(json)});
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
void removeGroupChat(String groupChatId) {
|
|
|
|
groupChats.remove(groupChatId);
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2023-08-27 10:18:31 +08:00
|
|
|
void addGroupChatMemberProfile(
|
|
|
|
String groupChatId,
|
|
|
|
String memberId,
|
|
|
|
Map<String, dynamic> json,
|
|
|
|
) {
|
2023-10-21 21:25:09 +08:00
|
|
|
if (groupChatMemberProfiles.containsKey(groupChatId)) {
|
|
|
|
groupChatMemberProfiles[groupChatId]!.addAll(
|
2023-08-27 10:18:31 +08:00
|
|
|
{memberId: GroupChatMemberNameAvatar.fromJson(json)},
|
|
|
|
);
|
|
|
|
} else {
|
2023-10-21 21:25:09 +08:00
|
|
|
groupChatMemberProfiles[groupChatId] = {
|
2023-08-27 10:18:31 +08:00
|
|
|
memberId: GroupChatMemberNameAvatar.fromJson(json),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void refreshGroupChatMemberProfile(
|
|
|
|
String groupChatId,
|
|
|
|
Map<String, dynamic> json,
|
|
|
|
) {
|
|
|
|
json.forEach((key, value) {
|
2023-10-21 21:25:09 +08:00
|
|
|
groupChatMemberProfiles[groupChatId]![key] =
|
2023-08-27 10:18:31 +08:00
|
|
|
GroupChatMemberNameAvatar.fromJson(value);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
void addGroupChatMembers(String groupChatId, List<String> members) {
|
|
|
|
groupChats[groupChatId]!.members.addAll(members);
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
void changeGroupChatProfile(
|
|
|
|
String profile,
|
|
|
|
String groupChatId,
|
|
|
|
String newValue,
|
|
|
|
) {
|
|
|
|
switch (profile) {
|
|
|
|
case 'name':
|
|
|
|
groupChats[groupChatId]!.name = newValue;
|
|
|
|
break;
|
|
|
|
case 'intro':
|
|
|
|
groupChats[groupChatId]!.introduction = newValue;
|
|
|
|
break;
|
2023-10-06 16:43:51 +08:00
|
|
|
case 'avatar':
|
|
|
|
groupChats[groupChatId]!.avatar = newValue;
|
|
|
|
break;
|
2023-08-27 10:18:31 +08:00
|
|
|
}
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
void deleteGroupChat(String groupChatId) {
|
|
|
|
groupChats.remove(groupChatId);
|
2023-10-21 21:25:09 +08:00
|
|
|
groupChatMemberProfiles.remove(groupChatId);
|
2023-08-27 10:18:31 +08:00
|
|
|
notifyListeners();
|
2023-08-23 16:30:41 +08:00
|
|
|
}
|
2023-08-27 19:14:37 +08:00
|
|
|
|
2023-09-09 16:48:47 +08:00
|
|
|
void clear() {
|
|
|
|
friends.clear();
|
|
|
|
groupChats.clear();
|
2023-10-21 21:25:09 +08:00
|
|
|
groupChatMemberProfiles.clear();
|
2023-08-27 19:14:37 +08:00
|
|
|
}
|
2023-07-27 18:17:52 +08:00
|
|
|
}
|