Hibok
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

165 řádky
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. if (userInfo == null ) {
  61. print(('userinfo ==null'));
  62. return Container();
  63. }
  64. Widget avatar = ClipRRect(
  65. borderRadius: BorderRadius.all(Radius.circular(8.0)),
  66. child: CachedNetworkImage(
  67. imageUrl: userInfo.headimgurl,
  68. placeholder: CustomUI.buildImgLoding,
  69. width: Constants.ConversationAvatarSize,
  70. height: Constants.ConversationAvatarSize,
  71. ));
  72. List<Widget> _rightArea = [
  73. Align(
  74. alignment: Alignment.topCenter,
  75. child: Text(Constants.getShowTime(lastMessageModel.updateAt, context),
  76. textScaleFactor: 1.0, style: AppStyles.DescStyle),
  77. ),
  78. Expanded(
  79. child: Align(
  80. alignment: Alignment.bottomCenter,
  81. child: UnreadCountDot(
  82. sessionId: lastMessageModel.sessionId, unreadCount: unreadCount),
  83. ))
  84. ];
  85. return InkWell(
  86. child: Container(
  87. padding: const EdgeInsets.all(10.0),
  88. height: 68,
  89. alignment: Alignment.center,
  90. decoration: BoxDecoration(
  91. color: Color(AppColors.ConversationItemBgColor),
  92. border: Border(bottom: Constants.GreyBorderSide)),
  93. child: Row(
  94. crossAxisAlignment: CrossAxisAlignment.center,
  95. children: <Widget>[
  96. avatar,
  97. Container(width: 10.0),
  98. Expanded(
  99. child: Column(
  100. crossAxisAlignment: CrossAxisAlignment.start,
  101. mainAxisAlignment: MainAxisAlignment.center,
  102. children: <Widget>[
  103. Text(
  104. Provider.of<RefNameProvider>(context)
  105. .getRefName(userInfo.userId, userInfo.nickName),
  106. textScaleFactor: 1.0,
  107. overflow: TextOverflow.ellipsis,
  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,isGroup: false,),
  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. }