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.
 
 
 
 
 
 

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