import 'package:flutter/material.dart'; class FriendSetting { String friendRemark = ''; String friendGroup = ''; FriendSetting.fromJson(Map json) { friendRemark = json['friendRemark'] ?? ''; friendGroup = json['friendGroup'] ?? '我的好友'; } } class GroupChatSetting { String nameRemark = ''; String myRemark = ''; GroupChatSetting.fromJson(Map<String, dynamic> json) { nameRemark = json['nameRemark'] ?? ''; myRemark = json['myRemark'] ?? ''; } } class Contact extends ChangeNotifier { Map<String, FriendSetting> friends = {}; List<String> friendGroups = []; Map<String, GroupChatSetting> 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; }); // json['groupChats'].forEach((key, value) { // groupChats[key] = GroupChatSetting.fromJson(value); // groupChatCount += 1; // }); friendGroups = List.from(json['friendGroups']); } Map<String, FriendSetting> filterGroupFriends(String groupName) { Map<String, FriendSetting> 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({'nameRemark': '', 'myRemark': ''}); groupChatCount += 1; notifyListeners(); } void changeGroupChatSetting( String setting, String groupChatId, String newValue, ) { switch (setting) { case 'nameRemark': groupChats[groupChatId]!.nameRemark = newValue; break; case 'myRemark': groupChats[groupChatId]!.myRemark = 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 = ''; String baseAvatarPath = ''; FriendAccountProfile.fromJson(Map<String, dynamic> json) { id = json['id']; username = json['username']; email = json['email']; nickname = json['nickname'] ?? ''; birthday = json['birthday'] ?? ''; location = json['location'] ?? ''; status = json['status'] ?? ''; sign = json['sign'] ?? ''; avatar = json['avatar'] ?? ''; } } 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) { id = json['id']; 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 remark = ''; String nickname = ''; String avatar = ''; GroupChatMemberNameAvatar.fromJson(Map<String, dynamic> json) { remark = json['remark'] ?? ''; nickname = json['nickname'] ?? ''; avatar = json['avatar'] ?? ''; } } class ContactAccountProfile extends ChangeNotifier { Map<String, FriendAccountProfile> friends = {}; Map<String, GroupChatProfile> groupChats = {}; Map<String, Map<String, GroupChatMemberNameAvatar>> grouChatMemberProfiles = {}; 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<String, dynamic> json) { friends.addAll({friendId: FriendAccountProfile.fromJson(json)}); notifyListeners(); } void removeFriend(String friendId) { friends.remove(friendId); notifyListeners(); } void addGroupChatProfile(String groupChatId, Map<String, dynamic> json) { groupChats.addAll({groupChatId: GroupChatProfile.fromJson(json)}); notifyListeners(); } void removeGroupChat(String groupChatId) { groupChats.remove(groupChatId); notifyListeners(); } void addGroupChatMemberProfile( String groupChatId, String memberId, Map<String, dynamic> json, ) { if (grouChatMemberProfiles.containsKey(groupChatId)) { grouChatMemberProfiles[groupChatId]!.addAll( {memberId: GroupChatMemberNameAvatar.fromJson(json)}, ); } else { grouChatMemberProfiles[groupChatId] = { memberId: GroupChatMemberNameAvatar.fromJson(json), }; } } void refreshGroupChatMemberProfile( String groupChatId, Map<String, dynamic> json, ) { json.forEach((key, value) { grouChatMemberProfiles[groupChatId]![key] = 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; } notifyListeners(); } void deleteGroupChat(String groupChatId) { groupChats.remove(groupChatId); grouChatMemberProfiles.remove(groupChatId); notifyListeners(); } void clear() { friends.clear(); groupChats.clear(); grouChatMemberProfiles.clear(); } }