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 json) { nameRemark = json['nameRemark'] ?? ''; myRemark = json['myRemark'] ?? ''; } } class Contact extends ChangeNotifier { Map friends = {}; List friendGroups = []; String defaultGroup = ''; Map groupChats = {}; 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({'nameRemark': '', 'myRemark': ''}); groupChatCount += 1; notifyListeners(); } } 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 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 administrators = []; List members = []; String introduction = ''; List noticeboard = []; List tags = []; String avatar = ''; GroupChatProfile.fromJson(Map 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 json) { remark = json['remark'] ?? ''; nickname = json['nickname'] ?? ''; avatar = json['avatar'] ?? ''; } } class ContactAccountProfile extends ChangeNotifier { Map friends = {}; Map groupChats = {}; Map 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 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 memberId, Map json) { grouChatMemberProfiles.addAll( {memberId: GroupChatMemberNameAvatar.fromJson(json)}, ); } }