import 'package:chat/data/UserData.dart'; import 'package:chat/models/UserInfo.dart'; import 'package:chat/models/ref_name_provider.dart'; import 'package:chat/utils/LoadingDialog.dart'; import 'package:chat/utils/sql_model.dart'; import 'package:flutter/material.dart'; import 'package:lpinyin/lpinyin.dart'; import 'package:provider/provider.dart'; class FriendModel { @required int friendId; @required String avatar; @required String name; String refName; String nameTag; int state; String creatTime; int applyId; FriendModel( {this.avatar, this.name, this.friendId, this.refName, this.state = 0, this.applyId = 0, this.creatTime = ''}) : assert(avatar != null), assert(name != null), assert(friendId != null) { nameTag = getNameTag(); } getTitle() { return refName ?? name; } updataRefName() { refName = Provider.of(LoadingManage.context, listen: false) .getRefName(friendId, name); nameTag = getNameTag(); } FriendModel.fromJson(Map json) { friendId = json['friendId']; avatar = json['avatar']; name = json['name']; updataRefName(); } FriendModel.fromServerJson(Map json) { friendId = json['UserId']; avatar = json['ImgUrl']; name = json['UserName']; state = json['ApplyStatus']; updataRefName(); } FriendModel.fromApplyServerJson(Map json) { friendId = json['ApplyUserId']; avatar = json['ApplyUrl']; name = json['ApplyName']; state = json['Status']; creatTime = json['CreatTime']; applyId = json['Id']; updataRefName(); } getNameTag() { var origin = refName; if (origin == null || origin.length == 0) { origin = name; } String pinyin = PinyinHelper.getPinyinE(origin); if (pinyin == null || pinyin.length == 0) { return '#'; } var tag = pinyin.substring(0, 1).toUpperCase(); if (tag == 'Ẩ') { return 'A'; } else if (tag == 'Đ') { return 'D'; } else if (tag.compareTo("A") < 0 || tag.compareTo("Z") > 0) { return '#'; } return tag; } } class FriendTableModel { final String table = 'friend'; Sql sql; FriendTableModel() { sql = Sql.setTable(table); } createTable() async { print('创建表$table'); await sql.createTable( table, 'friendId INTEGER, userId INTEGER, avatar TEXT,name TEXT'); } Future clear() { return sql.clearTable(table); } Future insert(FriendModel friendModel) async { var myId = UserData().basicInfo.userId; var response = await sql.insert({ 'avatar': friendModel.avatar, 'userId': myId, 'name': friendModel.name, 'friendId': friendModel.friendId }); return response; } Future insertWithUserInfo(UserInfo friendInfo) async { var response = await sql.insert({ 'avatar': friendInfo.headimgurl, 'name': friendInfo.nickName, 'userId': UserData().basicInfo.userId, 'friendId': friendInfo.userId }); return response; } deleteFriend(int friendId) async { var curUserId = UserData().basicInfo.userId; var res = await sql.db.delete(table, where: 'userId=? and friendId = ?', whereArgs: [curUserId, friendId]); print('删除好友结果$res'); return res; } Future> getAllConversation() async { List resultList = []; var curUserId = UserData().basicInfo.userId; var list = await sql.query(table, where: 'userId = $curUserId'); for (var i = 0; i < list.length; i++) { Map row = list[i]; resultList.add(FriendModel.fromJson(row)); } return resultList; } }