Hibok
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

156 rader
4.3 KiB

  1. import 'package:chat/data/constants.dart';
  2. import 'package:chat/models/UserInfo.dart';
  3. import 'package:chat/utils/HttpUtil.dart';
  4. import 'package:chat/utils/conversation_table.dart';
  5. import 'package:chat/utils/sql_util.dart';
  6. import 'package:chat/utils/TokenMgr.dart';
  7. import 'package:shared_preferences/shared_preferences.dart';
  8. class FriendListMgr {
  9. // 工厂模式
  10. factory FriendListMgr() => _getInstance();
  11. static FriendListMgr get instance => _getInstance();
  12. static FriendListMgr _instance;
  13. FriendListMgr._internal();
  14. static FriendListMgr _getInstance() {
  15. if (_instance == null) {
  16. _instance = FriendListMgr._internal();
  17. }
  18. return _instance;
  19. }
  20. List<FriendModel> friendList = [];
  21. //获取好友列表
  22. getFriendList() async {
  23. if (friendList != null && friendList.length > 0) {
  24. return friendList;
  25. }
  26. friendList = await SqlUtil.friendTableModel.getAllConversation();
  27. if (friendList.length == 0) {
  28. //从服务器拉取
  29. print('从服务器获取好友数据');
  30. getFriendListFromServer();
  31. }
  32. return friendList;
  33. }
  34. getFriendListFromServer() {
  35. HttpUtil().getFriendList((List data) async {
  36. Set oldUserId = new Set();
  37. for (var friendModel in friendList) {
  38. oldUserId.add(friendModel.friendId);
  39. }
  40. data.forEach((f) {
  41. var friend = FriendModel.fromServerJson(f);
  42. if (!oldUserId.contains(friend.friendId)) {
  43. addFriend(friend);
  44. }
  45. oldUserId.remove(friend.friendId);
  46. });
  47. for (var friendId in oldUserId) {
  48. delteFriend(friendId);
  49. }
  50. });
  51. deleteLocalUserId();
  52. }
  53. deleteLocalUserIdById(int userId) async {
  54. //删除本地新加好友记录
  55. SharedPreferences prefs = await SharedPreferences.getInstance();
  56. List<String> list = prefs.getStringList(Constants.NewFriendsList);
  57. list.remove(userId.toString());
  58. prefs.setStringList(Constants.NewFriendsList, list);
  59. }
  60. deleteLocalUserId() async {
  61. //删除本地新加好友记录
  62. SharedPreferences prefs = await SharedPreferences.getInstance();
  63. List<String> list = prefs.getStringList(Constants.NewFriendsList);
  64. if (list != null) {
  65. for (int i = 0; i < list.length; i++) {
  66. if (isMyFriend(int.parse(list[i]))) {
  67. list.remove(list[i]);
  68. }
  69. }
  70. prefs.setStringList(Constants.NewFriendsList, list);
  71. }
  72. }
  73. //添加好友
  74. addFriend(FriendModel friendModel) {
  75. if (isMyFriend(friendModel.friendId)) {
  76. return;
  77. }
  78. friendList.add(friendModel);
  79. SqlUtil.friendTableModel.insert(friendModel);
  80. }
  81. //删除好友
  82. delteFriend(int friendId) {
  83. for (var friendModel in friendList) {
  84. if (friendModel.friendId == friendId) {
  85. friendList.remove(friendModel);
  86. break;
  87. }
  88. }
  89. SqlUtil.friendTableModel.deleteFriend(friendId);
  90. }
  91. //删除所有好友
  92. deleteAllFriend() {
  93. friendList.clear();
  94. SqlUtil.friendTableModel.clear();
  95. }
  96. //是否是我的朋友
  97. isMyFriend(int userId) {
  98. for (var friendModel in friendList) {
  99. if (friendModel.friendId == userId) {
  100. return true;
  101. }
  102. }
  103. return false;
  104. }
  105. //同步好友信息
  106. updateFriendInfo(UserInfo info) {
  107. for (int i = 0; i < friendList.length; i++) {
  108. if (friendList[i].friendId == info.userId) {
  109. SqlUtil.friendTableModel.deleteFriend(info.userId);
  110. friendList[i].name = info.nickName;
  111. friendList[i].avatar = info.headimgurl;
  112. friendList[i].nameTag = friendList[i].getNameTag();
  113. SqlUtil.friendTableModel.insert(friendList[i]);
  114. }
  115. }
  116. }
  117. updateRefNmae(int userId) {
  118. for (int i = 0; i < friendList.length; i++) {
  119. if (friendList[i].friendId == userId) {
  120. friendList[i].updataRefName();
  121. }
  122. }
  123. }
  124. //从服务器校验好友
  125. checkFromServer(String sign) async {
  126. List<FriendModel> friendList =
  127. await SqlUtil.friendTableModel.getAllConversation();
  128. List idList = [];
  129. for (var model in friendList) {
  130. idList.add(model.friendId);
  131. }
  132. idList.sort();
  133. if (friendList.length == 0 ||
  134. TokenMgr().generateMd5(idList.join(',')) != sign) {
  135. getFriendListFromServer();
  136. }
  137. }
  138. }