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.
 
 
 
 
 
 

205 rivejä
6.6 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. print('翻译管家的 通知消息-');
  128. TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent);
  129. if(res.noticeType==TransHKChatNoticeType.StartChat){
  130. desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_start;
  131. }else if(res.noticeType==TransHKChatNoticeType.EndChat){
  132. desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_end;
  133. }else{
  134. desc = '';
  135. }
  136. }else{
  137. var notice =
  138. GroupChatNotice.fromBuffer(widget.lastMessageModel.msgContent);
  139. print('widget.lastMessageModel.type ${widget.lastMessageModel.type}');
  140. var groupInfo = await GroupInfoMgr()
  141. .getGroupInfo(widget.lastMessageModel.sessionId);
  142. desc = MsgHandler.getGroupNoticeMsg(notice, groupInfo);
  143. print('ggdesc $desc}');
  144. if (desc.contains('\$')) {
  145. desc = desc.substring(0, desc.indexOf('\$'));
  146. } else {}
  147. }
  148. break;
  149. case ChatType.FileChatType:
  150. desc = '[${I18n.of(context).file}]';
  151. break;
  152. default:
  153. }
  154. if (mounted) {
  155. setState(() {});
  156. }
  157. }
  158. @override
  159. Widget build(BuildContext context) {
  160. if (widget.lastMessageModel == null) {
  161. return Container();
  162. }
  163. if (widget.lastMessageModel.type == ChatType.TextChatType) {
  164. //处理表情
  165. return extendedText(desc,
  166. fontSize: 12,
  167. color: Constants.GreyTextColor,
  168. emojisize: 12.0,
  169. maxLines: 1);
  170. } else {
  171. return Text(desc,
  172. textScaleFactor: 1.0,
  173. textAlign: TextAlign.center,
  174. maxLines: 1,
  175. overflow: TextOverflow.ellipsis,
  176. style: AppStyles.DescStyle);
  177. }
  178. }
  179. }