import 'package:chat/data/constants.dart'; import 'package:chat/models/UserInfo.dart'; import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/conversation_table.dart'; import 'package:chat/utils/sql_util.dart'; import 'package:chat/utils/TokenMgr.dart'; import 'package:shared_preferences/shared_preferences.dart'; class FriendListMgr { // 工厂模式 factory FriendListMgr() => _getInstance(); static FriendListMgr get instance => _getInstance(); static FriendListMgr _instance; FriendListMgr._internal(); static FriendListMgr _getInstance() { if (_instance == null) { _instance = FriendListMgr._internal(); } return _instance; } List friendList = []; //获取好友列表 getFriendList() async { if (friendList != null && friendList.length > 0) { return friendList; } friendList = await SqlUtil.friendTableModel.getAllConversation(); if (friendList.length == 0) { //从服务器拉取 print('从服务器获取好友数据'); getFriendListFromServer(); } return friendList; } getFriendListFromServer() { HttpUtil().getFriendList((List data) async { Set oldUserId = new Set(); for (var friendModel in friendList) { oldUserId.add(friendModel.friendId); } data.forEach((f) { var friend = FriendModel.fromServerJson(f); if (!oldUserId.contains(friend.friendId)) { addFriend(friend); } oldUserId.remove(friend.friendId); }); for (var friendId in oldUserId) { delteFriend(friendId); } }); deleteLocalUserId(); } deleteLocalUserId() async { //删除本地新加好友记录 SharedPreferences prefs = await SharedPreferences.getInstance(); List list = prefs.getStringList(Constants.NewFriendsList); if (list != null) { for (int i = 0; i < list.length; i++) { if (isMyFriend(int.parse(list[i]))) { list.remove(list[i]); } } prefs.setStringList(Constants.NewFriendsList, list); } } //添加好友 addFriend(FriendModel friendModel) { if (isMyFriend(friendModel.friendId)) { return; } friendList.add(friendModel); SqlUtil.friendTableModel.insert(friendModel); } //删除好友 delteFriend(int friendId) { for (var friendModel in friendList) { if (friendModel.friendId == friendId) { friendList.remove(friendModel); break; } } SqlUtil.friendTableModel.deleteFriend(friendId); } //删除所有好友 deleteAllFriend() { friendList.clear(); SqlUtil.friendTableModel.clear(); } //是否是我的朋友 isMyFriend(int userId) { for (var friendModel in friendList) { if (friendModel.friendId == userId) { return true; } } return false; } //同步好友信息 updateFriendInfo(UserInfo info) { for (int i = 0; i < friendList.length; i++) { if (friendList[i].friendId == info.userId) { SqlUtil.friendTableModel.deleteFriend(info.userId); friendList[i].name = info.nickName; friendList[i].avatar = info.headimgurl; friendList[i].nameTag = friendList[i].getNameTag(); SqlUtil.friendTableModel.insert(friendList[i]); } } } updateRefNmae(int userId) { for (int i = 0; i < friendList.length; i++) { if (friendList[i].friendId == userId) { friendList[i].updataRefName(); } } } //从服务器校验好友 checkFromServer(String sign) async { List friendList = await SqlUtil.friendTableModel.getAllConversation(); List idList = []; for (var model in friendList) { idList.add(model.friendId); } idList.sort(); if (friendList.length == 0 || TokenMgr().generateMd5(idList.join(',')) != sign) { getFriendListFromServer(); } } }