Hibok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

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