Hibok
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

198 lines
7.6 KiB

  1. import 'dart:ui';
  2. import 'package:chat/data/chat_data_mgr.dart';
  3. import 'package:chat/data/constants.dart';
  4. import 'package:chat/generated/i18n.dart';
  5. import 'package:chat/home/send_msg_state.dart';
  6. import 'package:chat/models/group_info_model.dart';
  7. import 'package:chat/models/last_msg_description.dart';
  8. import 'package:chat/utils/app_navigator.dart';
  9. import 'package:chat/utils/image_util.dart';
  10. import 'package:chat/utils/screen.dart';
  11. import 'package:flutter/material.dart';
  12. import 'package:flutter/rendering.dart';
  13. import 'package:chat/models/ref_name_provider.dart';
  14. import 'package:provider/provider.dart';
  15. import 'last_unread_dot.dart';
  16. const double AvatarSize = 60;
  17. const double GroupRadius = 6.5;
  18. const double LeftPadding = 15;
  19. const double ItemHeight = 83.5;
  20. class GroupItem extends StatefulWidget {
  21. GroupItem(Key key,
  22. {@required this.groupInfoModel,
  23. this.onPressed,
  24. this.isShowDivder: true,
  25. this.enterType = 0,
  26. this.enterContent})
  27. : super(key: key);
  28. final GroupInfoModel groupInfoModel;
  29. final VoidCallback onPressed;
  30. final bool isShowDivder;
  31. final int enterType; // 0默认 1图片
  32. final dynamic enterContent;
  33. @override
  34. _GroupItemState createState() => _GroupItemState();
  35. }
  36. class _GroupItemState extends State<GroupItem> {
  37. @override
  38. void initState() {
  39. super.initState();
  40. }
  41. GlobalKey key = GlobalKey();
  42. @override
  43. Widget build(BuildContext context) {
  44. Widget _avatarIcon =
  45. WidgetUtil.getAvatarNew(widget.groupInfoModel, key, (String path) {
  46. widget.groupInfoModel.image = path;
  47. });
  48. List<Widget> _rightArea = [
  49. SizedBox(height: 4),
  50. Align(
  51. alignment: Alignment.topCenter,
  52. child: widget.groupInfoModel.lastMsg == null
  53. ? Container()
  54. : Text(
  55. Constants.getShowTime(
  56. widget.groupInfoModel.lastMsg.updateAt, context),
  57. textScaleFactor: 1.0,
  58. style: AppStyles.DescStyle),
  59. ),
  60. Expanded(
  61. child: Align(
  62. alignment: Alignment.bottomCenter,
  63. child: widget.groupInfoModel.lastMsg == null
  64. ? Container()
  65. : (widget.groupInfoModel.messageFree == 1
  66. ? Icon(
  67. IconData(0xe673, fontFamily: Constants.IconFontFamily),
  68. color: Colors.grey[400],
  69. size: 20,
  70. )
  71. : UnreadCountDot(
  72. sessionId: widget.groupInfoModel.lastMsg.sessionId,
  73. unreadCount: ChatDataMgr()
  74. .groupUnreadProvider
  75. .getUnreadCount(
  76. widget.groupInfoModel.lastMsg.sessionId))),
  77. ))
  78. ];
  79. Map refMap = Provider.of<RefNameProvider>(context).refMap;
  80. return InkWell(
  81. child: Container(
  82. padding: const EdgeInsets.only(
  83. left: LeftPadding, right: LeftPadding, top: 13.5, bottom: 13.5),
  84. height: ItemHeight,
  85. alignment: Alignment.center,
  86. decoration: BoxDecoration(
  87. color: Color(widget.groupInfoModel.topTag == 1
  88. ? 0xfff5f6f9
  89. : AppColors.ConversationItemBgColor),
  90. border: Border(bottom: Constants.GreyBorderSide)),
  91. child: Row(
  92. crossAxisAlignment: CrossAxisAlignment.center,
  93. children: <Widget>[
  94. Stack(
  95. children: <Widget>[
  96. _avatarIcon,
  97. Positioned(
  98. right: 0,
  99. top: 0,
  100. child: Offstage(
  101. offstage: !(widget.groupInfoModel.lastMsg != null &&
  102. widget.groupInfoModel.messageFree == 1 &&
  103. ChatDataMgr().groupUnreadProvider.getUnreadCount(
  104. widget.groupInfoModel.lastMsg.sessionId) >
  105. 0),
  106. child: CircleAvatar(
  107. radius: 4,
  108. backgroundColor: Colors.red,
  109. )))
  110. ],
  111. ),
  112. Container(width: 10.0),
  113. Expanded(
  114. child: Column(
  115. crossAxisAlignment: CrossAxisAlignment.start,
  116. mainAxisAlignment: MainAxisAlignment.center,
  117. children: <Widget>[
  118. SizedBox(height: 3),
  119. Text(widget.groupInfoModel.getGroupName(refMap),
  120. textScaleFactor: 1.0,
  121. maxLines: 1,
  122. overflow: TextOverflow.ellipsis,
  123. style: TextStyle(
  124. fontSize: 15,
  125. color: Colors.black,
  126. )),
  127. Expanded(child: SizedBox()),
  128. Row(
  129. children: <Widget>[
  130. widget.groupInfoModel.lastMsg == null
  131. ? Container()
  132. : SendMsgState(
  133. sessionId:
  134. widget.groupInfoModel.lastMsg.sessionId,
  135. time: widget.groupInfoModel.lastMsg.updateAt),
  136. widget.groupInfoModel.lastMsg == null
  137. ? Container()
  138. : Row(
  139. children: <Widget>[
  140. Text(
  141. widget.groupInfoModel.lastMsg != null &&
  142. widget.groupInfoModel.messageFree ==
  143. 1 &&
  144. ChatDataMgr()
  145. .groupUnreadProvider
  146. .getUnreadCount(widget
  147. .groupInfoModel
  148. .lastMsg
  149. .sessionId) >
  150. 0
  151. ? '[${ChatDataMgr().groupUnreadProvider.getUnreadCount(widget.groupInfoModel.lastMsg.sessionId)}${I18n.of(context).article}] '
  152. : "",
  153. textScaleFactor: 1.0,
  154. style: AppStyles.DescStyle),
  155. Container(
  156. constraints: BoxConstraints(
  157. maxWidth: Screen.width - 160),
  158. child: LastMsgDescription(
  159. Key(widget.groupInfoModel.sessionId
  160. .toString()),
  161. widget.groupInfoModel.lastMsg))
  162. ],
  163. )
  164. ],
  165. ),
  166. SizedBox(height: 7)
  167. ],
  168. ),
  169. ),
  170. SizedBox(width: 10),
  171. SizedBox(
  172. height: Constants.ConversationAvatarSize,
  173. child: Column(
  174. crossAxisAlignment: CrossAxisAlignment.end,
  175. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  176. children: _rightArea,
  177. ),
  178. )
  179. ],
  180. ),
  181. ),
  182. onTap: () {
  183. AppNavigator.pushGroupChatPage(context, widget.groupInfoModel,
  184. enterType: widget.enterType, enterContent: widget.enterContent);
  185. },
  186. );
  187. }
  188. }