import 'package:flutter/material.dart'; class FriendSetting { String friendRemark = ''; String friendGroup = ''; FriendSetting.fromJson(Map json) { friendRemark = json['friendRemark'] ?? ''; friendGroup = json['friendGroup'] ?? '我的好友'; } } class GroupChatSetting { String groupChatRemark = ''; String remarkInGroupChat = ''; GroupChatSetting.fromJson(Map json) { groupChatRemark = json['groupChatRemark'] ?? ''; remarkInGroupChat = json['remarkInGroupChat'] ?? ''; } } class Contact extends ChangeNotifier { Map friends = {}; List friendGroups = []; Map groupChats = {}; String defaultGroup = ''; int friendCount = 0; int groupChatCount = 0; void init(Map json) { defaultGroup = json['defaultGroup']; friendCount = 0; groupChatCount = 0; json['friends'].forEach((key, value) { friendCount += 1; friends[key] = FriendSetting.fromJson(value); }); json['groupChats'].forEach((key, value) { groupChats[key] = GroupChatSetting.fromJson(value); groupChatCount += 1; }); friendGroups = List.from(json['friendGroups']); } Map filterGroupFriends(String groupName) { Map groupFriends = {}; friends.forEach((key, value) { if (value.friendGroup == groupName) { groupFriends[key] = value; } }); return groupFriends; } 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(); } void changeGroupChatSetting( String setting, String groupChatId, String newValue, ) { switch (setting) { case 'groupChatRemark': groupChats[groupChatId]!.groupChatRemark = newValue; break; case 'remarkInGroupChat': groupChats[groupChatId]!.remarkInGroupChat = newValue; break; } notifyListeners(); } void deleteGroupChat(String groupChatId) { groupChats.remove(groupChatId); groupChatCount--; notifyListeners(); } void clear() { friends.clear(); friendGroups.clear(); groupChats.clear(); 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 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 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 administrators = []; List members = []; String introduction = ''; List noticeboard = []; List tags = []; String avatar = ''; GroupChatProfile.fromJson(Map 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 json) { remarkInGroupChat = json['remarkInGroupChat'] ?? ''; nickname = json['nickname'] ?? ''; avatar = json['avatar'] ?? ''; } } class ContactAccountProfile extends ChangeNotifier { Map friends = {}; Map groupChats = {}; Map> groupChatMemberProfiles = {}; void init(Map json) { json['friends'].forEach((key, value) { friends[key] = FriendAccountProfile.fromJson(value); }); json['groupChats'].forEach((key, value) { groupChats[key] = GroupChatProfile.fromJson(value); }); } (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 json) { friends.addAll({friendId: FriendAccountProfile.fromJson(json)}); notifyListeners(); } void removeFriend(String friendId) { friends.remove(friendId); notifyListeners(); } void addGroupChatProfile(String groupChatId, Map json) { groupChats.addAll({groupChatId: GroupChatProfile.fromJson(json)}); notifyListeners(); } void removeGroupChat(String groupChatId) { groupChats.remove(groupChatId); notifyListeners(); } void addGroupChatMemberProfile( String groupChatId, String memberId, Map json, ) { if (groupChatMemberProfiles.containsKey(groupChatId)) { groupChatMemberProfiles[groupChatId]!.addAll( {memberId: GroupChatMemberNameAvatar.fromJson(json)}, ); } else { groupChatMemberProfiles[groupChatId] = { memberId: GroupChatMemberNameAvatar.fromJson(json), }; } } void refreshGroupChatMemberProfile( String groupChatId, Map json, ) { json.forEach((key, value) { groupChatMemberProfiles[groupChatId]![key] = GroupChatMemberNameAvatar.fromJson(value); }); } void addGroupChatMembers(String groupChatId, List 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; case 'avatar': groupChats[groupChatId]!.avatar = newValue; break; } notifyListeners(); } void deleteGroupChat(String groupChatId) { groupChats.remove(groupChatId); groupChatMemberProfiles.remove(groupChatId); notifyListeners(); } void clear() { friends.clear(); groupChats.clear(); groupChatMemberProfiles.clear(); } }