import 'package:flutter/material.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:go_router/go_router.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:together_mobile/common/constants.dart'; import 'package:together_mobile/database/box_type.dart'; import 'package:together_mobile/models/contact_model.dart'; import 'package:together_mobile/models/init_get_it.dart'; import 'package:together_mobile/request/server.dart'; import 'badge_avatar.dart'; class ChatTile extends StatefulWidget { const ChatTile({ super.key, required this.contactId, }); final String contactId; @override State createState() => _ChatTileState(); } class _ChatTileState extends State { Future> _getLatestMsg() async { LazyBox messageTBox = Hive.lazyBox('message_${widget.contactId}'); int messageCount = messageTBox.length; if (messageCount > 0) { MessageT messageT = (await messageTBox.getAt(messageCount - 1))!; return Future(() => { 'text': messageT.text, 'dateTime': messageT.dateTime, 'attachments': messageT.attachments, }); } else { return Future(() => {}); } } @override Widget build(BuildContext context) { return Slidable( key: const ValueKey(0), endActionPane: ActionPane( motion: const BehindMotion(), dismissible: DismissiblePane( onDismissed: () {}, ), children: [ SlidableAction( onPressed: (BuildContext context) {}, backgroundColor: kSecondaryColor, foregroundColor: kContentColorDark, icon: Icons.arrow_upward_rounded, label: '置顶', ), SlidableAction( onPressed: (BuildContext context) {}, foregroundColor: kContentColorDark, backgroundColor: kPrimaryColor, icon: Icons.remove_red_eye, label: '隐藏信息', flex: 1, ), ], ), child: ListTile( // Must have a onTap callback or Ink won't work onTap: () => context.goNamed( 'Message', queryParameters: {'contactId': widget.contactId}, ), leading: getIt .get() .friends[widget.contactId]! .avatar .isEmpty ? const BadgeAvatar( count: 99, radius: 25, backgroundImage: AssetImage('assets/images/user_3.png'), ) : BadgeAvatar( count: 99, radius: 25, backgroundImage: CachedNetworkImageProvider( '$avatarsUrl/${getIt.get().friends[widget.contactId]!.avatar}', ), ), title: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( // friend remark or nickname child: Text( getIt .get() .friends[widget.contactId]! .friendRemark .isEmpty ? getIt .get() .friends[widget.contactId]! .nickname : getIt .get() .friends[widget.contactId]! .friendRemark, overflow: TextOverflow.ellipsis, ), ), // latest msg datetime Text('10:13'), ], ), subtitle: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( 'How are you today, you look not very well, whats happended to you', overflow: TextOverflow.ellipsis, style: TextStyle( color: Theme.of(context).textTheme.displayLarge?.color), ), ), // Text('10:13'), ], ), ), ); } }