From cd1f8cc386b7993b0a4493732bb3d24a43946411 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Sat, 31 Jul 2021 23:49:30 +0200 Subject: [PATCH] refactor: Select chat list item logic --- lib/widgets/list_items/chat_list_item.dart | 305 ++++++++++----------- 1 file changed, 151 insertions(+), 154 deletions(-) diff --git a/lib/widgets/list_items/chat_list_item.dart b/lib/widgets/list_items/chat_list_item.dart index 084d5ef3..dbd019e8 100644 --- a/lib/widgets/list_items/chat_list_item.dart +++ b/lib/widgets/list_items/chat_list_item.dart @@ -146,171 +146,168 @@ class ChatListItem extends StatelessWidget { ? 20.0 : 14.0 : 0.0; - return Center( - child: Material( - color: FluffyThemes.chatListItemColor(context, activeChat, selected), - child: ListTile( - onLongPress: onLongPress, - leading: selected - ? Container( - width: Avatar.defaultSize, - height: Avatar.defaultSize, - child: Material( - color: Theme.of(context).primaryColor, - borderRadius: BorderRadius.circular(Avatar.defaultSize), - child: Icon(Icons.check, color: Colors.white), - ), - ) - : Avatar(room.avatar, room.displayname, onTap: onLongPress), - title: Row( - children: [ - Expanded( - child: Text( - room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), - maxLines: 1, - overflow: TextOverflow.ellipsis, - softWrap: false, - ), + return ListTile( + selected: selected, + selectedTileColor: + FluffyThemes.chatListItemColor(context, activeChat, selected), + onLongPress: onLongPress, + leading: selected + ? Container( + width: Avatar.defaultSize, + height: Avatar.defaultSize, + child: Material( + color: Theme.of(context).primaryColor, + borderRadius: BorderRadius.circular(Avatar.defaultSize), + child: Icon(Icons.check, color: Colors.white), ), - if (isMuted) - Padding( - padding: const EdgeInsets.only(left: 4.0), - child: Icon( - Icons.notifications_off_outlined, - size: 16, - ), - ), - if (room.isFavourite) - Padding( - padding: EdgeInsets.only( - right: room.notificationCount > 0 ? 4.0 : 0.0), - child: Icon( - Icons.push_pin_outlined, - size: 16, - color: Theme.of(context).colorScheme.secondary, - ), - ), - Padding( - padding: const EdgeInsets.only(left: 4.0), - child: Text( - room.timeCreated.localizedTimeShort(context), - style: TextStyle( - fontSize: 13, - color: room.notificationCount > 0 - ? Theme.of(context).colorScheme.secondary - : null, - ), - ), - ), - ], + ) + : Avatar(room.avatar, room.displayname, onTap: onLongPress), + title: Row( + children: [ + Expanded( + child: Text( + room.getLocalizedDisplayname(MatrixLocals(L10n.of(context))), + maxLines: 1, + overflow: TextOverflow.ellipsis, + softWrap: false, + ), ), - subtitle: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - if (typingText.isEmpty && ownMessage) ...{ - Icon( - room.lastEvent.statusIcon, - size: 14, - ), - SizedBox(width: 4), - }, - AnimatedContainer( - width: typingText.isEmpty ? 0 : 18, - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration(), - duration: Duration(milliseconds: 300), - curve: Curves.bounceInOut, - padding: EdgeInsets.only(right: 4), - child: Icon( - Icons.edit_outlined, - color: Theme.of(context).colorScheme.secondary, - size: 14, - ), + if (isMuted) + Padding( + padding: const EdgeInsets.only(left: 4.0), + child: Icon( + Icons.notifications_off_outlined, + size: 16, ), - if (typingText.isEmpty && - !ownMessage && - !room.isDirectChat && - room.lastEvent != null && - room.lastEvent.type == EventTypes.Message && - {MessageTypes.Text, MessageTypes.Notice} - .contains(room.lastEvent.messageType)) - Text( - '${room.lastEvent.sender.calcDisplayname()}: ', - style: TextStyle( - color: Theme.of(context).textTheme.bodyText1.color, - ), - ), - Expanded( - child: typingText.isNotEmpty + ), + if (room.isFavourite) + Padding( + padding: EdgeInsets.only( + right: room.notificationCount > 0 ? 4.0 : 0.0), + child: Icon( + Icons.push_pin_outlined, + size: 16, + color: Theme.of(context).colorScheme.secondary, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 4.0), + child: Text( + room.timeCreated.localizedTimeShort(context), + style: TextStyle( + fontSize: 13, + color: room.notificationCount > 0 + ? Theme.of(context).colorScheme.secondary + : null, + ), + ), + ), + ], + ), + subtitle: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (typingText.isEmpty && ownMessage) ...{ + Icon( + room.lastEvent.statusIcon, + size: 14, + ), + SizedBox(width: 4), + }, + AnimatedContainer( + width: typingText.isEmpty ? 0 : 18, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + duration: Duration(milliseconds: 300), + curve: Curves.bounceInOut, + padding: EdgeInsets.only(right: 4), + child: Icon( + Icons.edit_outlined, + color: Theme.of(context).colorScheme.secondary, + size: 14, + ), + ), + if (typingText.isEmpty && + !ownMessage && + !room.isDirectChat && + room.lastEvent != null && + room.lastEvent.type == EventTypes.Message && + {MessageTypes.Text, MessageTypes.Notice} + .contains(room.lastEvent.messageType)) + Text( + '${room.lastEvent.sender.calcDisplayname()}: ', + style: TextStyle( + color: Theme.of(context).textTheme.bodyText1.color, + ), + ), + Expanded( + child: typingText.isNotEmpty + ? Text( + typingText, + style: TextStyle( + color: Theme.of(context).colorScheme.secondary, + ), + softWrap: false, + ) + : room.membership == Membership.invite ? Text( - typingText, + L10n.of(context).youAreInvitedToThisChat, style: TextStyle( color: Theme.of(context).colorScheme.secondary, + fontWeight: FontWeight.bold, ), softWrap: false, ) - : room.membership == Membership.invite - ? Text( - L10n.of(context).youAreInvitedToThisChat, - style: TextStyle( - color: Theme.of(context).colorScheme.secondary, - fontWeight: FontWeight.bold, - ), - softWrap: false, - ) - : Text( - room.lastEvent?.getLocalizedBody( - MatrixLocals(L10n.of(context)), - hideReply: true, - ) ?? - '', - softWrap: false, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: room.isUnread - ? Theme.of(context).colorScheme.secondary - : null, - fontWeight: - room.isUnread ? FontWeight.bold : null, - decoration: room.lastEvent?.redacted == true - ? TextDecoration.lineThrough - : null, - ), - ), - ), - SizedBox(width: 8), - AnimatedContainer( - duration: Duration(milliseconds: 300), - curve: Curves.bounceInOut, - padding: EdgeInsets.symmetric(horizontal: 7), - height: unreadBubbleSize, - width: room.notificationCount == 0 && !room.isUnread - ? 0 - : unreadBubbleSize, - decoration: BoxDecoration( - color: room.highlightCount > 0 - ? Colors.red - : Theme.of(context).primaryColor, - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - ), - child: Center( - child: room.notificationCount > 0 - ? Text( - room.notificationCount.toString(), - style: TextStyle( - color: Colors.white, - fontSize: 13, - ), - ) - : Container(), - ), - ), - ], + : Text( + room.lastEvent?.getLocalizedBody( + MatrixLocals(L10n.of(context)), + hideReply: true, + ) ?? + '', + softWrap: false, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: room.isUnread + ? Theme.of(context).colorScheme.secondary + : null, + fontWeight: room.isUnread ? FontWeight.bold : null, + decoration: room.lastEvent?.redacted == true + ? TextDecoration.lineThrough + : null, + ), + ), ), - onTap: () => clickAction(context), - ), + SizedBox(width: 8), + AnimatedContainer( + duration: Duration(milliseconds: 300), + curve: Curves.bounceInOut, + padding: EdgeInsets.symmetric(horizontal: 7), + height: unreadBubbleSize, + width: room.notificationCount == 0 && !room.isUnread + ? 0 + : unreadBubbleSize, + decoration: BoxDecoration( + color: room.highlightCount > 0 + ? Colors.red + : Theme.of(context).primaryColor, + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + ), + child: Center( + child: room.notificationCount > 0 + ? Text( + room.notificationCount.toString(), + style: TextStyle( + color: Colors.white, + fontSize: 13, + ), + ) + : Container(), + ), + ), + ], ), + onTap: () => clickAction(context), ); } }