import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:liftmanager/internal/bbs/bbs_router.dart'; import 'package:liftmanager/routers/fluro_navigator.dart'; import '../../common/style/style.dart' show AppColors,Constants,ICons; import '../../model/conversation.dart'; // import '../../routers/application.dart'; class ConversationItem extends StatelessWidget { ConversationItem(this.conversationItemData,this.index,this.type) :assert(conversationItemData != null); int index; int type; final Conversation conversationItemData; var tapPos; @override Widget build(BuildContext context) { return Material( color: Color(AppColors.ConversationItemBg), child: InkWell( onTap: (){ print('打开会话:${conversationItemData.title}'); // Application.router.navigateTo(context, '/chatdetail?index=${index}&type=${type}'); NavigatorUtils.push(context, BbsRouter.chatRoom); }, onTapDown: (TapDownDetails details) { tapPos = details.globalPosition; }, onLongPress: (){ _showMenu(context,tapPos); print('弹出会话菜单:${conversationItemData.title}'); }, child: Container( height: ScreenUtil().setHeight(120), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ avatarContainer(conversationItemData), Content(), ], ), ), ), ); } _showMenu(BuildContext context,Offset tapPos){ final RenderBox overlay =Overlay.of(context).context.findRenderObject(); final RelativeRect position = RelativeRect.fromLTRB( tapPos.dx, tapPos.dy, overlay.size.width - tapPos.dx, overlay.size.height - tapPos.dy ); showMenu( context: context, position: position, items: >[ PopupMenuItem( child: Text(Constants.MENU_MARK_AS_UNREAD_VALUE), value: Constants.MENU_MARK_AS_UNREAD, ), PopupMenuItem( child: Text(Constants.MENU_PIN_TO_TOP_VALUE), value: Constants.MENU_PIN_TO_TOP, ), PopupMenuItem( child: Text(Constants.MENU_DELETE_CONVERSATION_VALUE), value: Constants.MENU_DELETE_CONVERSATION, ), ] ).then((String selected) { switch(selected){ default: print('当前选中的是:$selected'); } }); } Widget Content(){ return Expanded( child: Container( height: ScreenUtil().setHeight(120), margin: EdgeInsets.only(left:ScreenUtil().setWidth(20.0)), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 0.5,color: Color(AppColors.DividerColor),) ) ), child: Row( children: [ Title(conversationItemData), Tip(conversationItemData) ], ), ), ); } Widget ClipRRectImg(){ return ClipRRect( borderRadius: BorderRadius.circular(5.0), child: conversationItemData.isAvatarFromNet() ? Image.network(conversationItemData.avatar,scale: 1.0, fit: BoxFit.cover,) : Image.asset(conversationItemData.avatar, fit: BoxFit.cover,), ); } Widget Avatar(conversationItemData){ return Container( margin: EdgeInsets.only(left:ScreenUtil().setWidth(20.0)), child: ClipRRectImg(), width: ScreenUtil().setWidth(100), height: ScreenUtil().setWidth(100) ); } Widget Title(conversationItemData){ return Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( conversationItemData.title, style: TextStyle(fontSize: ScreenUtil().setSp(30.0),color: Color(AppColors.TitleColor),fontWeight:FontWeight.w400), maxLines: 1, overflow: TextOverflow.ellipsis, ), SizedBox(height: ScreenUtil().setHeight(15.0),), Text( conversationItemData.des, style: TextStyle(fontSize: ScreenUtil().setSp(24.0),color: Color(AppColors.DesTextColor)), maxLines: 1, overflow: TextOverflow.ellipsis, ) ], ), ); } Widget Tip(conversationItemData){ var _rightArea =[ Text(conversationItemData.updateAt,style:TextStyle(fontSize: ScreenUtil().setSp(24.0),color: Color(AppColors.DesTextColor))), SizedBox(height: ScreenUtil().setHeight(15.0),) ]; if(conversationItemData.isMute){ _rightArea.add(new Icon(ICons.MUTE_ICON,color: Color(AppColors.ConversationMuteIcon),size: ScreenUtil().setSp(30),)); }else{ _rightArea.add(new Icon(ICons.MUTE_ICON,color: Colors.transparent,size: ScreenUtil().setSp(30),)); } return Container( width:ScreenUtil().setWidth(80), margin: EdgeInsets.only(right: ScreenUtil().setWidth(10.0)), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: _rightArea ), ); } Widget avatarContainer(conversationItemData){ if(conversationItemData.unreadMsgCount > 0){ return Stack( overflow: Overflow.visible, children: [ Avatar(conversationItemData), Positioned( right:-3.0 , top: -3.0, child: unreadMsgCountText(conversationItemData), ) ], ); }else{ return Avatar(conversationItemData); } } Widget unreadMsgCountText(conversationItemData){ return Container( width: ScreenUtil().setWidth(32.0), height: ScreenUtil().setWidth(32.0), alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(35.0), color: Color(AppColors.NotifyDotBg) ), child: Text(conversationItemData.unreadMsgCount.toString(),style:TextStyle(fontSize: ScreenUtil().setSp(18),color: Color(AppColors.NotifyDotText))), ); } Widget muteIcon(){ return new Icon(ICons.MUTE_ICON); } }