Hibok
您不能選擇超過 %s 個話題 話題必須以字母或數字為開頭,可包含連接號 ('-') 且最長為 35 個字
 
 
 
 
 
 

165 行
5.4 KiB

  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:chat/data/chat_data_mgr.dart';
  3. import 'package:chat/data/constants.dart';
  4. import 'package:chat/home/send_msg_state.dart';
  5. import 'package:chat/models/UserInfo.dart';
  6. import 'package:chat/models/last_message_model.dart';
  7. import 'package:chat/models/last_msg_description.dart';
  8. import 'package:chat/models/ref_name_provider.dart';
  9. import 'package:chat/utils/CustomUI.dart';
  10. import 'package:chat/utils/HttpUtil.dart';
  11. import 'package:chat/utils/MessageMgr.dart';
  12. import 'package:chat/utils/app_navigator.dart';
  13. import 'package:chat/utils/msgHandler.dart';
  14. import 'package:chat/utils/screen.dart';
  15. import 'package:flutter/material.dart';
  16. import 'package:provider/provider.dart';
  17. import 'last_unread_dot.dart';
  18. class LastChatItem extends StatefulWidget {
  19. final LastMessageModel lastMessageModel;
  20. final int enterType; // 0默认 1图片
  21. final dynamic enterContent;
  22. LastChatItem(Key key, this.lastMessageModel,
  23. {this.enterType = 0, this.enterContent})
  24. : super(key: key);
  25. @override
  26. _LastChatItemState createState() => _LastChatItemState();
  27. }
  28. class _LastChatItemState extends State<LastChatItem> {
  29. LastMessageModel lastMessageModel;
  30. UserInfo userInfo;
  31. int retryCount=0;
  32. @override
  33. void initState() {
  34. super.initState();
  35. lastMessageModel = widget.lastMessageModel;
  36. initUserInfo();
  37. MessageMgr().on('UpdateUserInfo', msgUpdateUserInfo);
  38. }
  39. initUserInfo() async {
  40. print('## xxx ${widget.lastMessageModel.friendId}');
  41. userInfo = await HttpUtil().getFriendInfo(widget.lastMessageModel.friendId);
  42. setState(() {});
  43. }
  44. msgUpdateUserInfo(info) {
  45. if (info.userId == widget.lastMessageModel.friendId) {
  46. userInfo = info;
  47. setState(() {});
  48. }
  49. }
  50. @override
  51. void dispose() {
  52. super.dispose();
  53. MessageMgr().off('UpdateUserInfo', msgUpdateUserInfo);
  54. }
  55. @override
  56. Widget build(BuildContext context) {
  57. int unreadCount = ChatDataMgr()
  58. .unreadCountProvider
  59. .getUnreadCount(widget.lastMessageModel.sessionId);
  60. print('build lastchatimte 未读消息数$unreadCount');
  61. if (userInfo == null ) {
  62. print(('userinfo ==null'));
  63. return Container();
  64. }
  65. Widget avatar = ClipRRect(
  66. borderRadius: BorderRadius.all(Radius.circular(8.0)),
  67. child: CachedNetworkImage(
  68. imageUrl: userInfo.headimgurl,
  69. placeholder: CustomUI.buildImgLoding,
  70. width: Constants.ConversationAvatarSize,
  71. height: Constants.ConversationAvatarSize,
  72. ));
  73. List<Widget> _rightArea = [
  74. Align(
  75. alignment: Alignment.topCenter,
  76. child: Text(Constants.getShowTime(lastMessageModel.updateAt, context),
  77. textScaleFactor: 1.0, style: AppStyles.DescStyle),
  78. ),
  79. Expanded(
  80. child: Align(
  81. alignment: Alignment.bottomCenter,
  82. child: UnreadCountDot(
  83. sessionId: lastMessageModel.sessionId, unreadCount: unreadCount),
  84. ))
  85. ];
  86. return InkWell(
  87. child: Container(
  88. padding: const EdgeInsets.all(10.0),
  89. height: 68,
  90. alignment: Alignment.center,
  91. decoration: BoxDecoration(
  92. color: Color(AppColors.ConversationItemBgColor),
  93. border: Border(bottom: Constants.GreyBorderSide)),
  94. child: Row(
  95. crossAxisAlignment: CrossAxisAlignment.center,
  96. children: <Widget>[
  97. avatar,
  98. Container(width: 10.0),
  99. Expanded(
  100. child: Column(
  101. crossAxisAlignment: CrossAxisAlignment.start,
  102. mainAxisAlignment: MainAxisAlignment.center,
  103. children: <Widget>[
  104. Text(
  105. Provider.of<RefNameProvider>(context)
  106. .getRefName(userInfo.userId, userInfo.nickName),
  107. textScaleFactor: 1.0,
  108. style: TextStyle(
  109. fontSize: 15,
  110. color: Colors.black,
  111. )),
  112. Expanded(child: SizedBox()),
  113. Row(
  114. children: <Widget>[
  115. SendMsgState(
  116. sessionId: lastMessageModel.sessionId,
  117. time: lastMessageModel.updateAt),
  118. Container(
  119. constraints:
  120. BoxConstraints(maxWidth: Screen.width - 130),
  121. child: LastMsgDescription(
  122. Key("Item$lastMessageModel.sessionId"),
  123. lastMessageModel))
  124. ],
  125. ),
  126. SizedBox(height: 2)
  127. ],
  128. ),
  129. ),
  130. SizedBox(
  131. height: Constants.ConversationAvatarSize,
  132. child: Column(
  133. crossAxisAlignment: CrossAxisAlignment.end,
  134. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  135. children: _rightArea,
  136. ),
  137. )
  138. ],
  139. ),
  140. ),
  141. onTap: () {
  142. MsgHandler.updateActiveSesstion(lastMessageModel.sessionId);
  143. AppNavigator.pushChatPage(context, lastMessageModel.friendId,
  144. enterType: widget.enterType, enterContent: widget.enterContent);
  145. },
  146. );
  147. }
  148. }