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.
 
 
 
 
 
 

155 lines
3.8 KiB

  1. import 'package:chat/data/UserData.dart';
  2. import 'package:chat/models/UserInfo.dart';
  3. import 'package:chat/models/ref_name_provider.dart';
  4. import 'package:chat/data/constants.dart';
  5. import 'package:chat/utils/sql_model.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:lpinyin/lpinyin.dart';
  8. import 'package:provider/provider.dart';
  9. class FriendModel {
  10. @required
  11. int friendId;
  12. @required
  13. String avatar;
  14. @required
  15. String name;
  16. String refName;
  17. String nameTag;
  18. int state;
  19. String creatTime;
  20. int applyId;
  21. FriendModel(
  22. {this.avatar,
  23. this.name,
  24. this.friendId,
  25. this.refName,
  26. this.state = 0,
  27. this.applyId = 0,
  28. this.creatTime = ''})
  29. : assert(avatar != null),
  30. assert(name != null),
  31. assert(friendId != null) {
  32. nameTag = getNameTag();
  33. }
  34. getTitle() {
  35. return refName ?? name;
  36. }
  37. updataRefName() {
  38. refName = Provider.of<RefNameProvider>(Constants.getCurrentContext(), listen: false)
  39. .getRefName(friendId, name);
  40. nameTag = getNameTag();
  41. }
  42. FriendModel.fromJson(Map<String, dynamic> json) {
  43. friendId = json['friendId'];
  44. avatar = json['avatar'];
  45. name = json['name'];
  46. updataRefName();
  47. }
  48. FriendModel.fromServerJson(Map<String, dynamic> json) {
  49. friendId = json['UserId'];
  50. avatar = json['ImgUrl'];
  51. name = json['UserName'];
  52. state = json['ApplyStatus'];
  53. updataRefName();
  54. }
  55. FriendModel.fromApplyServerJson(Map<String, dynamic> json) {
  56. friendId = json['ApplyUserId'];
  57. avatar = json['ApplyUrl'];
  58. name = json['ApplyName'];
  59. state = json['Status'];
  60. creatTime = json['CreatTime'];
  61. applyId = json['Id'];
  62. updataRefName();
  63. }
  64. getNameTag() {
  65. var origin = refName;
  66. if (origin == null || origin.length == 0) {
  67. origin = name;
  68. }
  69. String pinyin = PinyinHelper.getPinyinE(origin);
  70. if (pinyin == null || pinyin.length == 0) {
  71. return '#';
  72. }
  73. var tag = pinyin.substring(0, 1).toUpperCase();
  74. if (tag == 'Ẩ') {
  75. return 'A';
  76. } else if (tag == 'Đ') {
  77. return 'D';
  78. } else if (tag.compareTo("A") < 0 || tag.compareTo("Z") > 0) {
  79. return '#';
  80. }
  81. return tag;
  82. }
  83. }
  84. class FriendTableModel {
  85. final String table = 'friend';
  86. Sql sql;
  87. FriendTableModel() {
  88. sql = Sql.setTable(table);
  89. }
  90. createTable() async {
  91. print('创建表$table');
  92. await sql.createTable(
  93. table, 'friendId INTEGER, userId INTEGER, avatar TEXT,name TEXT');
  94. }
  95. Future clear() {
  96. return sql.clearTable(table);
  97. }
  98. Future insert(FriendModel friendModel) async {
  99. var myId = UserData().basicInfo.userId;
  100. var response = await sql.insert({
  101. 'avatar': friendModel.avatar,
  102. 'userId': myId,
  103. 'name': friendModel.name,
  104. 'friendId': friendModel.friendId
  105. });
  106. return response;
  107. }
  108. Future insertWithUserInfo(UserInfo friendInfo) async {
  109. var response = await sql.insert({
  110. 'avatar': friendInfo.headimgurl,
  111. 'name': friendInfo.nickName,
  112. 'userId': UserData().basicInfo.userId,
  113. 'friendId': friendInfo.userId
  114. });
  115. return response;
  116. }
  117. deleteFriend(int friendId) async {
  118. var curUserId = UserData().basicInfo.userId;
  119. var res = await sql.db.delete(table,
  120. where: 'userId=? and friendId = ?', whereArgs: [curUserId, friendId]);
  121. print('删除好友结果$res');
  122. return res;
  123. }
  124. Future<List<FriendModel>> getAllConversation() async {
  125. List<FriendModel> resultList = [];
  126. var curUserId = UserData().basicInfo.userId;
  127. var list = await sql.query(table, where: 'userId = $curUserId');
  128. for (var i = 0; i < list.length; i++) {
  129. Map row = list[i];
  130. resultList.add(FriendModel.fromJson(row));
  131. }
  132. return resultList;
  133. }
  134. }