Hibok
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

130 行
3.4 KiB

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