import 'dart:convert'; import 'package:chat/data/UserData.dart'; import 'package:chat/data/constants.dart'; import 'package:chat/data/group_data_mgr.dart'; import 'package:chat/generated/i18n.dart'; import 'package:chat/models/last_message_model.dart'; import 'package:chat/models/ref_name_provider.dart'; import 'package:chat/proto/chat.pb.dart'; import 'package:chat/proto/transhousekeeper.pb.dart'; import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/MessageMgr.dart'; import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/screen.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class LastMsgDescription extends StatefulWidget { final LastMessageModel lastMessageModel; LastMsgDescription(Key key, this.lastMessageModel) : super(key: key); @override _LastMsgDescriptionState createState() => _LastMsgDescriptionState(); } class _LastMsgDescriptionState extends State { var desc = ''; @override void initState() { super.initState(); getLastMsgDesc(); MessageMgr().on('Update LastMsg', updateList); } @override void dispose() { MessageMgr().off('Update LastMsg', updateList); super.dispose(); } updateList(sessionId) { if (sessionId == widget.lastMessageModel.sessionId) { getLastMsgDesc(); } } //获取用户的名字 getFriendName() async { String fdName; if (widget.lastMessageModel.channelType == ChatChannelType.Group.value) { //群的最新消息 fdName = Provider.of(context).getGroupRefName( widget.lastMessageModel.sessionId, widget.lastMessageModel.fromId); } else { //私聊最新消息 var friendInfo = await HttpUtil().getFriendInfo(widget.lastMessageModel.friendId); if (friendInfo != null) { fdName = Provider.of(context) .getRefName(friendInfo.userId, friendInfo.nickName); } } return fdName; } getLastMsgDesc() async { MessageMgr().emit('Update Group List'); if (widget.lastMessageModel == null) { return; } switch (widget.lastMessageModel.type) { case ChatType.TextChatType: desc = utf8.decode(widget.lastMessageModel.msgContent); print('desc: $desc'); if (desc.contains('[ ')) { desc = desc.replaceAll('[ ', '['); } if (desc.contains(' ]')) { desc = desc.replaceAll(' ]', ']'); } break; case ChatType.EmoticonType: desc = '[${I18n.of(Constants.getCurrentContext()).emoji}]'; break; case ChatType.ImageChatType: desc = '[${I18n.of(Constants.getCurrentContext()).picture}]'; break; case ChatType.ShortVideoChatType: desc = '[${I18n.of(Constants.getCurrentContext()).video}]'; break; case ChatType.PlaceChatType: desc = '[${I18n.of(Constants.getCurrentContext()).locate}]'; break; case ChatType.ShortVoiceChatType: desc = '[${I18n.of(Constants.getCurrentContext()).voice}]'; break; case ChatType.GiftChatType: GiftChat giftChat = GiftChat.fromBuffer(widget.lastMessageModel.msgContent); if (giftChat.tuId == UserData().basicInfo.userId) { desc = I18n.of(Constants.getCurrentContext()).you_get; } else { desc = I18n.of(Constants.getCurrentContext()).you_give; } break; case ChatType.RedWalletChatType: if (widget.lastMessageModel.fromId == 0) { var fdName = await getFriendName(); //服务器通知消息 RedWallet wallet = RedWallet.fromBuffer(widget.lastMessageModel.msgContent); if (wallet.state == RedWalletState.Received) { var myId = UserData().basicInfo.userId; if (wallet.suId == myId) { desc = I18n.of(Constants.getCurrentContext()) .get_money .replaceFirst('/s1', fdName); } else { desc = I18n.of(Constants.getCurrentContext()) .you_get_money .replaceFirst('/s1', fdName); } } else if (wallet.state == RedWalletState.Expire) { desc = I18n.of(Constants.getCurrentContext()).money_over; } else { print('WWWWW${wallet.state}'); } } else { desc = '[${I18n.of(Constants.getCurrentContext()).red_money}]'; } break; case ChatType.GroupChatNoticeType: if(widget.lastMessageModel.channelType==ChatChannelType.Session.value){ ///翻译管家的 通知消息 TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent); if(res.noticeType==TransHKChatNoticeType.StartChat){ desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_start; }else if(res.noticeType==TransHKChatNoticeType.EndChat){ desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_end; }else{ desc = ''; } }else{ var notice = GroupChatNotice.fromBuffer(widget.lastMessageModel.msgContent); print('widget.lastMessageModel.type ${widget.lastMessageModel.type}'); var groupInfo = await GroupInfoMgr() .getGroupInfo(widget.lastMessageModel.sessionId); desc = MsgHandler.getGroupNoticeMsg(notice, groupInfo); print('ggdesc $desc}'); if (desc.contains('\$')) { desc = desc.substring(0, desc.indexOf('\$')); } else {} } break; case ChatType.FileChatType: desc = '[${I18n.of(context).file}]'; break; default: } if (mounted) { setState(() {}); } } @override Widget build(BuildContext context) { if (widget.lastMessageModel == null) { return Container(); } if (widget.lastMessageModel.type == ChatType.TextChatType) { //处理表情 return extendedText(desc, fontSize: 12, color: Constants.GreyTextColor, emojisize: 12.0, maxLines: 1); } else { return Text(desc, textScaleFactor: 1.0, textAlign: TextAlign.center, maxLines: 1, overflow: TextOverflow.ellipsis, style: AppStyles.DescStyle); } } }