together_mobile/lib/models/contact_model.dart

314 lines
7.8 KiB
Dart
Raw Normal View History

2023-07-27 18:17:52 +08:00
import 'package:flutter/material.dart';
class FriendSetting {
String friendRemark = '';
String friendGroup = '';
FriendSetting.fromJson(Map json) {
2023-07-27 18:17:52 +08:00
friendRemark = json['friendRemark'] ?? '';
friendGroup = json['friendGroup'] ?? '我的好友';
2023-07-27 18:17:52 +08:00
}
}
class GroupChatSetting {
String groupChatRemark = '';
String remarkInGroupChat = '';
2023-07-27 18:17:52 +08:00
GroupChatSetting.fromJson(Map<String, dynamic> json) {
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 = '';
int friendCount = 0;
int groupChatCount = 0;
2023-07-27 18:17:52 +08:00
void init(Map json) {
defaultGroup = json['defaultGroup'];
friendCount = 0;
groupChatCount = 0;
json['friends'].forEach((key, value) {
friendCount += 1;
2023-07-27 18:17:52 +08:00
friends[key] = FriendSetting.fromJson(value);
});
json['groupChats'].forEach((key, value) {
groupChats[key] = GroupChatSetting.fromJson(value);
groupChatCount += 1;
});
friendGroups = List.from(json['friendGroups']);
}
2023-07-27 18:17:52 +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
});
return groupFriends;
}
2023-07-27 18:17:52 +08:00
void addFriend(String friendId, Map friendSetting) {
friends[friendId] = FriendSetting.fromJson(friendSetting);
friendCount += 1;
notifyListeners();
}
void changeFriendRemark(String friendId, String remark) {
friends[friendId]!.friendRemark = remark;
}
void changeFriendGroup(String friendId, String group) {
friends[friendId]!.friendGroup = group;
}
void removeFriend(String friendId) {
friends.remove(friendId);
friendCount -= 1;
notifyListeners();
}
void addGroupChat(String groupChatId) {
groupChats[groupChatId] = GroupChatSetting.fromJson(
{'groupChatRemark': '', 'remarkInGroupChat': ''});
groupChatCount += 1;
notifyListeners();
}
2023-08-27 10:18:31 +08:00
void changeGroupChatSetting(
String setting,
String groupChatId,
String newValue,
) {
switch (setting) {
case 'groupChatRemark':
groupChats[groupChatId]!.groupChatRemark = newValue;
2023-08-27 10:18:31 +08:00
break;
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;
}
}
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'] ?? '';
gender = _genderEn2Cn(json['gender'] ?? '');
avatar = json['avatar'] ?? '';
}
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' ? '' : '';
}
}
}
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 {
String remarkInGroupChat = '';
String nickname = '';
String avatar = '';
GroupChatMemberNameAvatar.fromJson(Map<String, dynamic> json) {
remarkInGroupChat = json['remarkInGroupChat'] ?? '';
nickname = json['nickname'] ?? '';
avatar = json['avatar'] ?? '';
}
}
class ContactAccountProfile extends ChangeNotifier {
Map<String, FriendAccountProfile> friends = {};
Map<String, GroupChatProfile> groupChats = {};
Map<String, Map<String, GroupChatMemberNameAvatar>> groupChatMemberProfiles =
2023-08-27 10:18:31 +08:00
{};
void init(Map json) {
json['friends'].forEach((key, value) {
friends[key] = FriendAccountProfile.fromJson(value);
});
json['groupChats'].forEach((key, value) {
groupChats[key] = GroupChatProfile.fromJson(value);
});
2023-07-27 18:17:52 +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, '');
}
void addFriendAccountProfile(String friendId, Map<String, dynamic> json) {
2023-08-11 23:02:31 +08:00
friends.addAll({friendId: FriendAccountProfile.fromJson(json)});
notifyListeners();
}
void removeFriend(String friendId) {
friends.remove(friendId);
2023-08-11 23:02:31 +08:00
notifyListeners();
}
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,
) {
if (groupChatMemberProfiles.containsKey(groupChatId)) {
groupChatMemberProfiles[groupChatId]!.addAll(
2023-08-27 10:18:31 +08:00
{memberId: GroupChatMemberNameAvatar.fromJson(json)},
);
} else {
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) {
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);
groupChatMemberProfiles.remove(groupChatId);
2023-08-27 10:18:31 +08:00
notifyListeners();
}
2023-08-27 19:14:37 +08:00
2023-09-09 16:48:47 +08:00
void clear() {
friends.clear();
groupChats.clear();
groupChatMemberProfiles.clear();
2023-08-27 19:14:37 +08:00
}
2023-07-27 18:17:52 +08:00
}