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.
 
 
 
 
 
 

184 regels
6.0 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. // initUserInfo();
  38. // initUserInfo();
  39. MessageMgr().on('UpdateUserInfo', msgUpdateUserInfo);
  40. }
  41. initUserInfo() async {
  42. print('## xxx ${widget.lastMessageModel.friendId}');
  43. userInfo = await HttpUtil().getFriendInfo(widget.lastMessageModel.friendId);
  44. setState(() {});
  45. }
  46. msgUpdateUserInfo(info) {
  47. if (info.userId == widget.lastMessageModel.friendId) {
  48. userInfo = info;
  49. setState(() {});
  50. }
  51. }
  52. @override
  53. void dispose() {
  54. super.dispose();
  55. MessageMgr().off('UpdateUserInfo', msgUpdateUserInfo);
  56. }
  57. @override
  58. Widget build(BuildContext context) {
  59. int unreadCount = ChatDataMgr()
  60. .unreadCountProvider
  61. .getUnreadCount(widget.lastMessageModel.sessionId);
  62. print('build lastchatimte 未读消息数$unreadCount');
  63. if (userInfo == null ) {
  64. print(('userinfo ==null'));
  65. return Container();
  66. }
  67. Widget avatar = ClipRRect(
  68. borderRadius: BorderRadius.all(Radius.circular(8.0)),
  69. child: CachedNetworkImage(
  70. imageUrl: userInfo.headimgurl,
  71. placeholder: CustomUI.buildImgLoding,
  72. width: Constants.ConversationAvatarSize,
  73. height: Constants.ConversationAvatarSize,
  74. ));
  75. List<Widget> _rightArea = [
  76. Align(
  77. alignment: Alignment.topCenter,
  78. child: Text(Constants.getShowTime(lastMessageModel.updateAt, context),
  79. textScaleFactor: 1.0, style: AppStyles.DescStyle),
  80. ),
  81. Expanded(
  82. child: Align(
  83. alignment: Alignment.bottomCenter,
  84. child: UnreadCountDot(
  85. sessionId: lastMessageModel.sessionId, unreadCount: unreadCount),
  86. ))
  87. ];
  88. return InkWell(
  89. child: Container(
  90. padding: const EdgeInsets.all(10.0),
  91. height: 68,
  92. alignment: Alignment.center,
  93. decoration: BoxDecoration(
  94. color: Color(AppColors.ConversationItemBgColor),
  95. border: Border(bottom: Constants.GreyBorderSide)),
  96. child: Row(
  97. crossAxisAlignment: CrossAxisAlignment.center,
  98. children: <Widget>[
  99. avatar,
  100. Container(width: 10.0),
  101. Expanded(
  102. child: Column(
  103. crossAxisAlignment: CrossAxisAlignment.start,
  104. mainAxisAlignment: MainAxisAlignment.center,
  105. children: <Widget>[
  106. Text(
  107. Provider.of<RefNameProvider>(context)
  108. .getRefName(userInfo.userId, userInfo.nickName),
  109. textScaleFactor: 1.0,
  110. style: TextStyle(
  111. fontSize: 15,
  112. color: Colors.black,
  113. )),
  114. Expanded(child: SizedBox()),
  115. Row(
  116. children: <Widget>[
  117. SendMsgState(
  118. sessionId: lastMessageModel.sessionId,
  119. time: lastMessageModel.updateAt),
  120. Container(
  121. constraints:
  122. BoxConstraints(maxWidth: Screen.width - 130),
  123. child: LastMsgDescription(
  124. Key("Item$lastMessageModel.sessionId"),
  125. lastMessageModel))
  126. ],
  127. ),
  128. SizedBox(height: 2)
  129. ],
  130. ),
  131. ),
  132. SizedBox(
  133. height: Constants.ConversationAvatarSize,
  134. child: Column(
  135. crossAxisAlignment: CrossAxisAlignment.end,
  136. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  137. children: _rightArea,
  138. ),
  139. )
  140. ],
  141. ),
  142. ),
  143. onTap: () {
  144. MsgHandler.updateActiveSesstion(lastMessageModel.sessionId);
  145. AppNavigator.pushChatPage(context, lastMessageModel.friendId,
  146. enterType: widget.enterType, enterContent: widget.enterContent);
  147. },
  148. );
  149. // FutureBuilder(
  150. // future: _friendInfoFuture,
  151. // builder: (BuildContext context, AsyncSnapshot snapshot) {
  152. // if (snapshot.connectionState == ConnectionState.done) {
  153. // if (snapshot.hasError) {
  154. // return Container();
  155. // } else {
  156. // UserInfo friendInfo = snapshot.data;
  157. // if (friendInfo == null) {
  158. // return Container();
  159. // }
  160. // } else {
  161. // return Container();
  162. // }
  163. // });
  164. }
  165. }