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ů.
 
 
 
 
 
 

210 řádky
8.4 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. //有人@你就优先展示
  141. ChatDataMgr()
  142. .groupUnreadProvider
  143. .getHavaAltertime(widget
  144. .groupInfoModel.lastMsg.sessionId) != null
  145. ? Text(
  146. '[有人@我]',
  147. textScaleFactor: 1.0,
  148. style: TextStyle(
  149. color: Colors.red, fontSize: 12),
  150. )
  151. : Text(
  152. widget.groupInfoModel.lastMsg != null &&
  153. widget.groupInfoModel
  154. .messageFree ==
  155. 1 &&
  156. ChatDataMgr()
  157. .groupUnreadProvider
  158. .getUnreadCount(widget
  159. .groupInfoModel
  160. .lastMsg
  161. .sessionId) >
  162. 0
  163. ? '[${ChatDataMgr().groupUnreadProvider.getUnreadCount(widget.groupInfoModel.lastMsg.sessionId)}${I18n.of(context).article}] '
  164. : "",
  165. textScaleFactor: 1.0,
  166. style: AppStyles.DescStyle),
  167. Container(
  168. constraints: BoxConstraints(
  169. maxWidth: Screen.width - 160),
  170. child: LastMsgDescription(
  171. Key(widget.groupInfoModel.sessionId
  172. .toString()),
  173. widget.groupInfoModel.lastMsg))
  174. ],
  175. )
  176. ],
  177. ),
  178. SizedBox(height: 7)
  179. ],
  180. ),
  181. ),
  182. SizedBox(width: 10),
  183. SizedBox(
  184. height: Constants.ConversationAvatarSize,
  185. child: Column(
  186. crossAxisAlignment: CrossAxisAlignment.end,
  187. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  188. children: _rightArea,
  189. ),
  190. )
  191. ],
  192. ),
  193. ),
  194. onTap: () {
  195. AppNavigator.pushGroupChatPage(context, widget.groupInfoModel,
  196. enterType: widget.enterType, enterContent: widget.enterContent);
  197. },
  198. );
  199. }
  200. }