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.
 
 
 
 
 
 

186 line
5.8 KiB

  1. import 'dart:convert';
  2. import 'package:chat/data/UserData.dart';
  3. import 'package:chat/data/constants.dart';
  4. import 'package:chat/data/group_data_mgr.dart';
  5. import 'package:chat/generated/i18n.dart';
  6. import 'package:chat/models/last_message_model.dart';
  7. import 'package:chat/models/ref_name_provider.dart';
  8. import 'package:chat/proto/chat.pb.dart';
  9. import 'package:chat/utils/HttpUtil.dart';
  10. import 'package:chat/utils/MessageMgr.dart';
  11. import 'package:chat/utils/msgHandler.dart';
  12. import 'package:chat/utils/screen.dart';
  13. import 'package:flutter/material.dart';
  14. import 'package:provider/provider.dart';
  15. class LastMsgDescription extends StatefulWidget {
  16. final LastMessageModel lastMessageModel;
  17. LastMsgDescription(Key key, this.lastMessageModel) : super(key: key);
  18. @override
  19. _LastMsgDescriptionState createState() => _LastMsgDescriptionState();
  20. }
  21. class _LastMsgDescriptionState extends State<LastMsgDescription> {
  22. var desc = '';
  23. @override
  24. void initState() {
  25. super.initState();
  26. getLastMsgDesc();
  27. MessageMgr().on('Update LastMsg', updateList);
  28. }
  29. @override
  30. void dispose() {
  31. MessageMgr().off('Update LastMsg', updateList);
  32. super.dispose();
  33. }
  34. updateList(sessionId) {
  35. if (sessionId == widget.lastMessageModel.sessionId) {
  36. getLastMsgDesc();
  37. }
  38. }
  39. //获取用户的名字
  40. getFriendName() async {
  41. String fdName;
  42. if (widget.lastMessageModel.channelType == ChatChannelType.Group.value) {
  43. //群的最新消息
  44. fdName = Provider.of<RefNameProvider>(context).getGroupRefName(
  45. widget.lastMessageModel.sessionId, widget.lastMessageModel.fromId);
  46. } else {
  47. //私聊最新消息
  48. var friendInfo =
  49. await HttpUtil().getFriendInfo(widget.lastMessageModel.friendId);
  50. if (friendInfo != null) {
  51. fdName = Provider.of<RefNameProvider>(context)
  52. .getRefName(friendInfo.userId, friendInfo.nickName);
  53. }
  54. }
  55. return fdName;
  56. }
  57. getLastMsgDesc() async {
  58. MessageMgr().emit('Update Group List');
  59. if (widget.lastMessageModel == null) {
  60. return;
  61. }
  62. switch (widget.lastMessageModel.type) {
  63. case ChatType.TextChatType:
  64. desc = utf8.decode(widget.lastMessageModel.msgContent);
  65. print('desc: $desc');
  66. if (desc.contains('[ ')) {
  67. desc = desc.replaceAll('[ ', '[');
  68. }
  69. if (desc.contains(' ]')) {
  70. desc = desc.replaceAll(' ]', ']');
  71. }
  72. break;
  73. case ChatType.EmoticonType:
  74. desc = '[${I18n.of(Constants.getCurrentContext()).emoji}]';
  75. break;
  76. case ChatType.ImageChatType:
  77. desc = '[${I18n.of(Constants.getCurrentContext()).picture}]';
  78. break;
  79. case ChatType.ShortVideoChatType:
  80. desc = '[${I18n.of(Constants.getCurrentContext()).video}]';
  81. break;
  82. case ChatType.PlaceChatType:
  83. desc = '[${I18n.of(Constants.getCurrentContext()).locate}]';
  84. break;
  85. case ChatType.ShortVoiceChatType:
  86. desc = '[${I18n.of(Constants.getCurrentContext()).voice}]';
  87. break;
  88. case ChatType.GiftChatType:
  89. GiftChat giftChat =
  90. GiftChat.fromBuffer(widget.lastMessageModel.msgContent);
  91. if (giftChat.tuId == UserData().basicInfo.userId) {
  92. desc = I18n.of(Constants.getCurrentContext()).you_get;
  93. } else {
  94. desc = I18n.of(Constants.getCurrentContext()).you_give;
  95. }
  96. break;
  97. case ChatType.RedWalletChatType:
  98. if (widget.lastMessageModel.fromId == 0) {
  99. var fdName = await getFriendName();
  100. //服务器通知消息
  101. RedWallet wallet =
  102. RedWallet.fromBuffer(widget.lastMessageModel.msgContent);
  103. if (wallet.state == RedWalletState.Received) {
  104. var myId = UserData().basicInfo.userId;
  105. if (wallet.suId == myId) {
  106. desc = I18n.of(Constants.getCurrentContext())
  107. .get_money
  108. .replaceFirst('/s1', fdName);
  109. } else {
  110. desc = I18n.of(Constants.getCurrentContext())
  111. .you_get_money
  112. .replaceFirst('/s1', fdName);
  113. }
  114. } else if (wallet.state == RedWalletState.Expire) {
  115. desc = I18n.of(Constants.getCurrentContext()).money_over;
  116. } else {
  117. print('WWWWW${wallet.state}');
  118. }
  119. } else {
  120. desc = '[${I18n.of(Constants.getCurrentContext()).red_money}]';
  121. }
  122. break;
  123. case ChatType.GroupChatNoticeType:
  124. var notice =
  125. GroupChatNotice.fromBuffer(widget.lastMessageModel.msgContent);
  126. print('widget.lastMessageModel.type ${widget.lastMessageModel.type}');
  127. var groupInfo = await GroupInfoMgr()
  128. .getGroupInfo(widget.lastMessageModel.sessionId);
  129. desc = MsgHandler.getGroupNoticeMsg(notice, groupInfo);
  130. print('ggdesc $desc}');
  131. if (desc.contains('\$')) {
  132. desc = desc.substring(0, desc.indexOf('\$'));
  133. } else {}
  134. break;
  135. case ChatType.FileChatType:
  136. desc = '[文件]';
  137. break;
  138. default:
  139. }
  140. if (mounted) {
  141. setState(() {});
  142. }
  143. }
  144. @override
  145. Widget build(BuildContext context) {
  146. if (widget.lastMessageModel == null) {
  147. return Container();
  148. }
  149. if (widget.lastMessageModel.type == ChatType.TextChatType) {
  150. //处理表情
  151. return extendedText(desc,
  152. fontSize: 12,
  153. color: Constants.GreyTextColor,
  154. emojisize: 12.0,
  155. maxLines: 1);
  156. } else {
  157. return Text(desc,
  158. textScaleFactor: 1.0,
  159. textAlign: TextAlign.center,
  160. maxLines: 1,
  161. overflow: TextOverflow.ellipsis,
  162. style: AppStyles.DescStyle);
  163. }
  164. }
  165. }