From 0f6aa466a2e46b00bd56941c57d8a3dbbedf8d90 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 12 May 2021 16:16:50 +0530 Subject: [PATCH 01/15] rfac: Removed basic transforms and adjusted borders --- .../lib/src/deleted_message.dart | 62 ++- .../lib/src/message_list_view.dart | 22 +- .../lib/src/message_widget.dart | 439 ++++++++---------- .../lib/src/quoted_message_widget.dart | 56 +-- .../lib/src/reaction_bubble.dart | 110 ++--- .../stream_chat_flutter/lib/src/utils.dart | 6 +- 6 files changed, 319 insertions(+), 376 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/deleted_message.dart b/packages/stream_chat_flutter/lib/src/deleted_message.dart index 96f5606a..38b6b1ea 100644 --- a/packages/stream_chat_flutter/lib/src/deleted_message.dart +++ b/packages/stream_chat_flutter/lib/src/deleted_message.dart @@ -31,42 +31,34 @@ class DeletedMessage extends StatelessWidget { final bool reverse; @override - Widget build(BuildContext context) => Transform( - transform: Matrix4.rotationY(reverse ? pi : 0), - alignment: Alignment.center, - child: Material( - color: messageTheme.messageBackgroundColor, - shape: shape ?? - RoundedRectangleBorder( - borderRadius: borderRadiusGeometry ?? BorderRadius.zero, - side: borderSide ?? - BorderSide( - color: Theme.of(context).brightness == Brightness.dark - ? StreamChatTheme.of(context) - .colorTheme - .white - .withAlpha(24) - : StreamChatTheme.of(context) - .colorTheme - .black - .withAlpha(24), - ), - ), - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 8, - horizontal: 16, + Widget build(BuildContext context) => Material( + color: messageTheme.messageBackgroundColor, + shape: shape ?? + RoundedRectangleBorder( + borderRadius: borderRadiusGeometry ?? BorderRadius.zero, + side: borderSide ?? + BorderSide( + color: Theme.of(context).brightness == Brightness.dark + ? StreamChatTheme.of(context) + .colorTheme + .white + .withAlpha(24) + : StreamChatTheme.of(context) + .colorTheme + .black + .withAlpha(24), + ), ), - child: Transform( - transform: Matrix4.rotationY(reverse ? pi : 0), - alignment: Alignment.center, - child: Text( - 'Message deleted', - style: messageTheme.messageText?.copyWith( - fontStyle: FontStyle.italic, - color: messageTheme.createdAt?.color, - ), - ), + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 8, + horizontal: 16, + ), + child: Text( + 'Message deleted', + style: messageTheme.messageText?.copyWith( + fontStyle: FontStyle.italic, + color: messageTheme.createdAt?.color, ), ), ), diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 2800a041..695f6474 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -1000,13 +1000,23 @@ class _MessageListViewState extends State { attachmentPadding: EdgeInsets.all(hasFileAttachment ? 4 : 2), borderRadiusGeometry: BorderRadius.only( topLeft: const Radius.circular(16), - bottomLeft: Radius.circular( - (timeDiff >= 1 || !isNextUserSame) && !(hasReplies || isThreadMessage) - ? 0 - : 16, - ), + bottomLeft: isMyMessage + ? const Radius.circular(16) + : Radius.circular( + (timeDiff >= 1 || !isNextUserSame) && + !(hasReplies || isThreadMessage) + ? 0 + : 16, + ), topRight: const Radius.circular(16), - bottomRight: const Radius.circular(16), + bottomRight: isMyMessage + ? Radius.circular( + (timeDiff >= 1 || !isNextUserSame) && + !(hasReplies || isThreadMessage) + ? 0 + : 16, + ) + : const Radius.circular(16), ), textPadding: EdgeInsets.symmetric( vertical: 8, diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 1866da0b..83cd2593 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -465,184 +465,166 @@ class _MessageWidgetState extends State : () => onLongPress(context), child: Padding( padding: widget.padding ?? const EdgeInsets.all(8), - child: Transform( - alignment: Alignment.center, - transform: Matrix4.rotationY(widget.reverse ? pi : 0), - child: FractionallySizedBox( - alignment: Alignment.centerLeft, - widthFactor: 0.78, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Stack( - clipBehavior: Clip.none, - alignment: AlignmentDirectional.bottomStart, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisSize: MainAxisSize.min, - children: [ - if (widget.showUserAvatar == - DisplayWidget.show && - widget.message.user != null) ...[ - _buildUserAvatar(), - const SizedBox(width: 4), - ], - if (widget.showUserAvatar == DisplayWidget.hide) - SizedBox(width: avatarWidth + 4), - Flexible( - child: PortalEntry( - portal: Container( - transform: - Matrix4.translationValues(-12, 0, 0), - constraints: const BoxConstraints( - maxWidth: 22 * 6.0), - child: _buildReactionIndicator(context), - ), - portalAnchor: const Alignment(-1, -1), - childAnchor: const Alignment(1, -1), - child: Stack( - clipBehavior: Clip.none, - children: [ - Padding( - padding: widget.showReactions - ? EdgeInsets.only( - top: widget - .message - .reactionCounts - ?.isNotEmpty == - true - ? 18 - : 0, - ) - : EdgeInsets.zero, - child: (widget.message.isDeleted && - !isFailedState) - ? Transform( - alignment: Alignment.center, - transform: Matrix4.rotationY( - widget.reverse ? pi : 0), - child: Container( - // ignore: lines_longer_than_80_chars - margin: EdgeInsets.symmetric( - horizontal: - // ignore: lines_longer_than_80_chars - widget.showUserAvatar == - // ignore: lines_longer_than_80_chars - DisplayWidget.gone - ? 0 - : 4.0), - child: DeletedMessage( - reverse: widget.reverse, - // ignore: lines_longer_than_80_chars - borderRadiusGeometry: widget - .borderRadiusGeometry, - borderSide: - widget.borderSide, - shape: widget.shape, - messageTheme: - widget.messageTheme, - ), - ), - ) - : Card( - clipBehavior: Clip.antiAlias, - elevation: 0, - margin: EdgeInsets.symmetric( - horizontal: (isFailedState - ? 15.0 - : 0.0) + + child: FractionallySizedBox( + alignment: Alignment.centerLeft, + widthFactor: 0.78, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Stack( + clipBehavior: Clip.none, + alignment: AlignmentDirectional.bottomStart, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.min, + children: [ + if (widget.showUserAvatar == DisplayWidget.show && + widget.message.user != null) ...[ + _buildUserAvatar(), + const SizedBox(width: 4), + ], + if (widget.showUserAvatar == DisplayWidget.hide) + SizedBox(width: avatarWidth + 4), + Flexible( + child: PortalEntry( + portal: Container( + transform: + Matrix4.translationValues(-12, 0, 0), + constraints: const BoxConstraints( + maxWidth: 22 * 6.0), + child: _buildReactionIndicator(context), + ), + portalAnchor: const Alignment(-1, -1), + childAnchor: const Alignment(1, -1), + child: Stack( + clipBehavior: Clip.none, + children: [ + Padding( + padding: widget.showReactions + ? EdgeInsets.only( + top: widget + .message + .reactionCounts + ?.isNotEmpty == + true + ? 18 + : 0, + ) + : EdgeInsets.zero, + child: (widget.message.isDeleted && + !isFailedState) + ? Container( + // ignore: lines_longer_than_80_chars + margin: EdgeInsets.symmetric( + horizontal: // ignore: lines_longer_than_80_chars - (widget.showUserAvatar == + widget.showUserAvatar == + // ignore: lines_longer_than_80_chars DisplayWidget .gone ? 0 : 4.0), - ), - shape: widget.shape ?? - RoundedRectangleBorder( - side: widget - .borderSide ?? - BorderSide( - color: widget - // ignore: lines_longer_than_80_chars - .messageTheme - // ignore: lines_longer_than_80_chars - .messageBorderColor ?? - Colors.grey, - ), - borderRadius: widget - // ignore: lines_longer_than_80_chars - .borderRadiusGeometry ?? - BorderRadius.zero, - ), - color: _getBackgroundColor(), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.end, - mainAxisSize: - MainAxisSize.min, - children: [ - if (hasQuotedMessage) - _buildQuotedMessage(), - if (hasNonUrlAttachments) - _parseAttachments(), - if (!isGiphy) - _buildTextBubble(), - ], - ), + child: DeletedMessage( + borderRadiusGeometry: widget + .borderRadiusGeometry, + borderSide: widget.borderSide, + shape: widget.shape, + messageTheme: + widget.messageTheme, ), - ), - if (widget.showReactionPickerIndicator) - Positioned( - right: 4, - top: -8, - child: Transform( - transform: Matrix4.rotationY( - widget.reverse ? pi : 0), - child: CustomPaint( - painter: ReactionBubblePainter( - StreamChatTheme.of(context) - .colorTheme - .white, - Colors.transparent, - Colors.transparent, - tailCirclesSpace: 1, + ) + : Card( + clipBehavior: Clip.antiAlias, + elevation: 0, + margin: EdgeInsets.symmetric( + horizontal: (isFailedState + ? 15.0 + : 0.0) + + // ignore: lines_longer_than_80_chars + (widget.showUserAvatar == + DisplayWidget.gone + ? 0 + : 4.0), + ), + shape: widget.shape ?? + RoundedRectangleBorder( + side: widget.borderSide ?? + BorderSide( + color: widget + // ignore: lines_longer_than_80_chars + .messageTheme + // ignore: lines_longer_than_80_chars + .messageBorderColor ?? + Colors.grey, + ), + borderRadius: widget + // ignore: lines_longer_than_80_chars + .borderRadiusGeometry ?? + BorderRadius.zero, + ), + color: _getBackgroundColor(), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.end, + mainAxisSize: + MainAxisSize.min, + children: [ + if (hasQuotedMessage) + _buildQuotedMessage(), + if (hasNonUrlAttachments) + _parseAttachments(), + if (!isGiphy) + _buildTextBubble(), + ], ), ), + ), + if (widget.showReactionPickerIndicator) + Positioned( + right: 4, + top: -8, + child: CustomPaint( + painter: ReactionBubblePainter( + StreamChatTheme.of(context) + .colorTheme + .white, + Colors.transparent, + Colors.transparent, + tailCirclesSpace: 1, ), ), - ], - ), + ), + ], ), ), - ], - ), - if (showBottomRow) - SizedBox(height: context.textScaleFactor * 18.0), - ], + ), + ], + ), + if (showBottomRow) + SizedBox(height: context.textScaleFactor * 18.0), + ], + ), + if (showBottomRow) + Padding( + padding: EdgeInsets.only(left: leftPadding), + child: _bottomRow, ), - if (showBottomRow) - Padding( - padding: EdgeInsets.only(left: leftPadding), - child: _bottomRow, - ), - if (isFailedState) - Positioned( - left: widget.reverse ? 0 : null, - right: widget.reverse ? null : 0, - bottom: showBottomRow ? 18 : -2, - child: StreamSvgIcon.error(size: 20), - ), - ], - ), - ], - ), + if (isFailedState) + Positioned( + left: widget.reverse ? 0 : null, + right: widget.reverse ? null : 0, + bottom: showBottomRow ? 18 : -2, + child: StreamSvgIcon.error(size: 20), + ), + ], + ), + ], ), ), ), @@ -672,26 +654,22 @@ class _MessageWidgetState extends State Widget get _bottomRow { if (isDeleted) { - return Transform( - transform: Matrix4.rotationY(widget.reverse ? pi : 0), - alignment: Alignment.center, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - StreamSvgIcon.eye( - color: StreamChatTheme.of(context).colorTheme.grey, - size: 16, - ), - const SizedBox(width: 8), - Text( - 'Only visible to you', - style: StreamChatTheme.of(context) - .textTheme - .footnote - .copyWith(color: StreamChatTheme.of(context).colorTheme.grey), - ), - ], - ), + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + StreamSvgIcon.eye( + color: StreamChatTheme.of(context).colorTheme.grey, + size: 16, + ), + const SizedBox(width: 8), + Text( + 'Only visible to you', + style: StreamChatTheme.of(context) + .textTheme + .footnote + .copyWith(color: StreamChatTheme.of(context).colorTheme.grey), + ), + ], ); } @@ -775,13 +753,9 @@ class _MessageWidgetState extends State ), ...children.map( (child) { - Widget mappedChild = Transform( - transform: Matrix4.rotationY(widget.reverse ? pi : 0), - alignment: Alignment.center, - child: SizedBox( - height: context.textScaleFactor * 14, - child: child, - ), + Widget mappedChild = SizedBox( + height: context.textScaleFactor * 14, + child: child, ); if (child.key == usernameKey) { mappedChild = Flexible(child: mappedChild); @@ -1071,56 +1045,47 @@ class _MessageWidgetState extends State return child; } - Widget _buildUserAvatar() => Transform( - transform: Matrix4.rotationY(widget.reverse ? pi : 0), - alignment: Alignment.center, - child: Transform.translate( - offset: Offset( - 0, - widget.translateUserAvatar - ? (widget.messageTheme.avatarTheme?.constraints.maxHeight ?? - 40) / - 2 - : 0, - ), - child: UserAvatar( - user: widget.message.user!, - onTap: widget.onUserAvatarTap, - constraints: widget.messageTheme.avatarTheme!.constraints, - borderRadius: widget.messageTheme.avatarTheme!.borderRadius, - showOnlineStatus: false, - ), + Widget _buildUserAvatar() => Transform.translate( + offset: Offset( + 0, + widget.translateUserAvatar + ? (widget.messageTheme.avatarTheme?.constraints.maxHeight ?? 40) / + 2 + : 0, + ), + child: UserAvatar( + user: widget.message.user!, + onTap: widget.onUserAvatarTap, + constraints: widget.messageTheme.avatarTheme!.constraints, + borderRadius: widget.messageTheme.avatarTheme!.borderRadius, + showOnlineStatus: false, ), ); Widget _buildTextBubble() { if (widget.message.text!.trim().isEmpty) return const Offstage(); - return Transform( - transform: Matrix4.rotationY(widget.reverse ? pi : 0), - alignment: Alignment.center, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: isOnlyEmoji ? EdgeInsets.zero : widget.textPadding, - child: widget.textBuilder != null - ? widget.textBuilder!(context, widget.message) - : MessageText( - onLinkTap: widget.onLinkTap, - message: widget.message, - onMentionTap: widget.onMentionTap, - messageTheme: isOnlyEmoji - ? widget.messageTheme.copyWith( - messageText: - widget.messageTheme.messageText!.copyWith( - fontSize: 42, - )) - : widget.messageTheme, - ), - ), - if (hasUrlAttachments && !hasQuotedMessage) _buildUrlAttachment(), - ], - ), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: isOnlyEmoji ? EdgeInsets.zero : widget.textPadding, + child: widget.textBuilder != null + ? widget.textBuilder!(context, widget.message) + : MessageText( + onLinkTap: widget.onLinkTap, + message: widget.message, + onMentionTap: widget.onMentionTap, + messageTheme: isOnlyEmoji + ? widget.messageTheme.copyWith( + messageText: + widget.messageTheme.messageText!.copyWith( + fontSize: 42, + )) + : widget.messageTheme, + ), + ), + if (hasUrlAttachments && !hasQuotedMessage) _buildUrlAttachment(), + ], ); } diff --git a/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart b/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart index 6be7ded7..08b0c1dd 100644 --- a/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart @@ -133,21 +133,17 @@ class QuotedMessageWidget extends StatelessWidget { if (_hasAttachments) _parseAttachments(context), if (msg.text!.isNotEmpty) Flexible( - child: Transform( - transform: Matrix4.rotationY(reverse ? pi : 0), - alignment: Alignment.center, - child: MessageText( - message: msg, - messageTheme: isOnlyEmoji && _containsText - ? messageTheme.copyWith( - messageText: messageTheme.messageText?.copyWith( - fontSize: 32, - )) - : messageTheme.copyWith( - messageText: messageTheme.messageText?.copyWith( - fontSize: 12, - )), - ), + child: MessageText( + message: msg, + messageTheme: isOnlyEmoji && _containsText + ? messageTheme.copyWith( + messageText: messageTheme.messageText?.copyWith( + fontSize: 32, + )) + : messageTheme.copyWith( + messageText: messageTheme.messageText?.copyWith( + fontSize: 12, + )), ), ), ].insertBetween(const SizedBox(width: 8)); @@ -218,15 +214,11 @@ class QuotedMessageWidget extends StatelessWidget { } } child = AbsorbPointer(child: child); - return Transform( - transform: Matrix4.rotationY(reverse ? pi : 0), - alignment: Alignment.center, - child: Material( - clipBehavior: Clip.antiAlias, - type: MaterialType.transparency, - shape: attachment.type == 'file' ? null : _getDefaultShape(context), - child: child, - ), + return Material( + clipBehavior: Clip.antiAlias, + type: MaterialType.transparency, + shape: attachment.type == 'file' ? null : _getDefaultShape(context), + child: child, ); } @@ -235,17 +227,13 @@ class QuotedMessageWidget extends StatelessWidget { borderRadius: BorderRadius.circular(8), ); - Widget _buildUserAvatar() => Transform( - transform: Matrix4.rotationY(reverse ? pi : 0), - alignment: Alignment.center, - child: UserAvatar( - user: message.user!, - constraints: const BoxConstraints.tightFor( - height: 24, - width: 24, - ), - showOnlineStatus: false, + Widget _buildUserAvatar() => UserAvatar( + user: message.user!, + constraints: const BoxConstraints.tightFor( + height: 24, + width: 24, ), + showOnlineStatus: false, ); Map diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index 9b45c248..44549675 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -52,68 +52,64 @@ class ReactionBubble extends StatelessWidget { final reactionIcons = StreamChatTheme.of(context).reactionIcons; final totalReactions = reactions.length; final offset = totalReactions > 1 ? 16.0 : 2.0; - return Transform( - transform: Matrix4.rotationY(reverse ? pi : 0), + return Stack( alignment: Alignment.center, - child: Stack( - alignment: Alignment.center, - children: [ - Transform.translate( - offset: Offset(reverse ? offset : -offset, 0), + children: [ + Transform.translate( + offset: Offset(reverse ? offset : -offset, 0), + child: Container( + padding: const EdgeInsets.all(2), + decoration: BoxDecoration( + color: maskColor, + borderRadius: const BorderRadius.all(Radius.circular(16)), + ), child: Container( - padding: const EdgeInsets.all(2), - decoration: BoxDecoration( - color: maskColor, - borderRadius: const BorderRadius.all(Radius.circular(16)), + padding: EdgeInsets.symmetric( + vertical: 4, + horizontal: totalReactions > 1 ? 4 : 0, ), - child: Container( - padding: EdgeInsets.symmetric( - vertical: 4, - horizontal: totalReactions > 1 ? 4 : 0, + decoration: BoxDecoration( + border: Border.all( + color: borderColor, ), - decoration: BoxDecoration( - border: Border.all( - color: borderColor, - ), - color: backgroundColor, - borderRadius: const BorderRadius.all(Radius.circular(14)), - ), - child: LayoutBuilder( - builder: (context, constraints) => Flex( - direction: Axis.horizontal, - mainAxisSize: MainAxisSize.min, - children: [ - if (constraints.maxWidth < double.infinity) - ...reactions - .take((constraints.maxWidth) ~/ 24) - .map((reaction) => _buildReaction( - reactionIcons, - reaction, - context, - )) - .toList(), - if (constraints.maxWidth == double.infinity) - ...reactions - .map((reaction) => _buildReaction( - reactionIcons, - reaction, - context, - )) - .toList(), - ], - ), + color: backgroundColor, + borderRadius: const BorderRadius.all(Radius.circular(14)), + ), + child: LayoutBuilder( + builder: (context, constraints) => Flex( + direction: Axis.horizontal, + mainAxisSize: MainAxisSize.min, + children: [ + if (constraints.maxWidth < double.infinity) + ...reactions + .take((constraints.maxWidth) ~/ 24) + .map((reaction) => _buildReaction( + reactionIcons, + reaction, + context, + )) + .toList(), + if (constraints.maxWidth == double.infinity) + ...reactions + .map((reaction) => _buildReaction( + reactionIcons, + reaction, + context, + )) + .toList(), + ], ), ), ), ), - Positioned( - bottom: 2, - left: reverse ? null : 13, - right: !reverse ? null : 13, - child: _buildReactionsTail(context), - ), - ], - ), + ), + Positioned( + bottom: 2, + left: reverse ? null : 13, + right: !reverse ? null : 13, + child: _buildReactionsTail(context), + ), + ], ); } @@ -166,11 +162,7 @@ class ReactionBubble extends StatelessWidget { tailCirclesSpace: tailCirclesSpacing, ), ); - return Transform( - transform: Matrix4.rotationY(flipTail ? 0 : pi), - alignment: Alignment.center, - child: tail, - ); + return tail; } } diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index cdd87e2d..8a35f60b 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -347,10 +347,6 @@ Widget wrapAttachmentWidget( clipBehavior: Clip.antiAlias, shape: attachmentShape, type: MaterialType.transparency, - child: Transform( - transform: Matrix4.rotationY(reverse ? pi : 0), - alignment: Alignment.center, - child: attachmentWidget, - ), + child: attachmentWidget, ), ); From 485d99ddb4ae3d8c2536d200a0e79372390852de Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Wed, 12 May 2021 17:54:22 +0530 Subject: [PATCH 02/15] rfac: Alignment of messages and reaction bubbles --- .../lib/src/message_widget.dart | 20 ++++++++++++++----- .../lib/src/reaction_bubble.dart | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 83cd2593..e76c6532 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -466,18 +466,25 @@ class _MessageWidgetState extends State child: Padding( padding: widget.padding ?? const EdgeInsets.all(8), child: FractionallySizedBox( - alignment: Alignment.centerLeft, + alignment: + widget.reverse ? Alignment.centerRight : Alignment.centerLeft, widthFactor: 0.78, child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: widget.reverse + ? CrossAxisAlignment.end + : CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Stack( clipBehavior: Clip.none, - alignment: AlignmentDirectional.bottomStart, + alignment: widget.reverse + ? AlignmentDirectional.bottomEnd + : AlignmentDirectional.bottomStart, children: [ Column( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: widget.reverse + ? CrossAxisAlignment.end + : CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Row( @@ -501,7 +508,8 @@ class _MessageWidgetState extends State child: _buildReactionIndicator(context), ), portalAnchor: const Alignment(-1, -1), - childAnchor: const Alignment(1, -1), + childAnchor: + Alignment(widget.reverse ? -1 : 1, -1), child: Stack( clipBehavior: Clip.none, children: [ @@ -736,6 +744,8 @@ class _MessageWidgetState extends State return Row( crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: + widget.reverse ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ if (showThreadTail) Container( diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index 44549675..f5ff2235 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -56,7 +56,7 @@ class ReactionBubble extends StatelessWidget { alignment: Alignment.center, children: [ Transform.translate( - offset: Offset(reverse ? offset : -offset, 0), + offset: Offset(reverse ? -offset : offset, 0), child: Container( padding: const EdgeInsets.all(2), decoration: BoxDecoration( From 1767200c39c17732b570ad0b10d491c1517a12cf Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Thu, 13 May 2021 17:19:40 +0530 Subject: [PATCH 03/15] rfac: Alignment of messages and reaction bubbles --- .../lib/src/reaction_bubble.dart | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index f5ff2235..ed864822 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -56,7 +56,7 @@ class ReactionBubble extends StatelessWidget { alignment: Alignment.center, children: [ Transform.translate( - offset: Offset(reverse ? -offset : offset, 0), + offset: Offset(-offset, 0), child: Container( padding: const EdgeInsets.all(2), decoration: BoxDecoration( @@ -106,7 +106,6 @@ class ReactionBubble extends StatelessWidget { Positioned( bottom: 2, left: reverse ? null : 13, - right: !reverse ? null : 13, child: _buildReactionsTail(context), ), ], @@ -160,6 +159,7 @@ class ReactionBubble extends StatelessWidget { borderColor, maskColor, tailCirclesSpace: tailCirclesSpacing, + flipTail: !flipTail, ), ); return tail; @@ -174,6 +174,7 @@ class ReactionBubblePainter extends CustomPainter { this.borderColor, this.maskColor, { this.tailCirclesSpace = 0, + this.flipTail = false, }); /// Color of bubble @@ -188,6 +189,9 @@ class ReactionBubblePainter extends CustomPainter { /// Tail circle space final double tailCirclesSpace; + /// Flip tail + final bool flipTail; + @override void paint(Canvas canvas, Size size) { _drawOvalMask(size, canvas); @@ -211,8 +215,9 @@ class ReactionBubblePainter extends CustomPainter { final path = Path() ..addOval( Rect.fromCircle( - center: - const Offset(4, 3) + Offset(tailCirclesSpace, tailCirclesSpace), + center: const Offset(4, 3).mirrorConditionally(flipTail) + + Offset(tailCirclesSpace, tailCirclesSpace) + .mirrorConditionally(flipTail), radius: 4, ), ); @@ -228,8 +233,9 @@ class ReactionBubblePainter extends CustomPainter { final path = Path() ..addOval( Rect.fromCircle( - center: - const Offset(4, 3) + Offset(tailCirclesSpace, tailCirclesSpace), + center: const Offset(4, 3).mirrorConditionally(flipTail) + + Offset(tailCirclesSpace, tailCirclesSpace) + .mirrorConditionally(flipTail), radius: 2, ), ); @@ -243,7 +249,9 @@ class ReactionBubblePainter extends CustomPainter { final path = Path() ..addOval(Rect.fromCircle( - center: const Offset(4, 3) + Offset(tailCirclesSpace, tailCirclesSpace), + center: const Offset(4, 3).mirrorConditionally(flipTail) + + Offset(tailCirclesSpace, tailCirclesSpace) + .mirrorConditionally(flipTail), radius: 2, )); canvas.drawPath(path, paint); @@ -261,7 +269,7 @@ class ReactionBubblePainter extends CustomPainter { final path = Path() ..addArc( Rect.fromCircle( - center: const Offset(1, dy), + center: const Offset(1, dy).mirrorConditionally(flipTail), radius: 4, ), -pi * startAngle, @@ -281,7 +289,7 @@ class ReactionBubblePainter extends CustomPainter { final path = Path() ..addArc( Rect.fromCircle( - center: const Offset(1, dy), + center: const Offset(1, dy).mirrorConditionally(flipTail), radius: 4, ), -pi * startAngle, @@ -302,7 +310,7 @@ class ReactionBubblePainter extends CustomPainter { final path = Path() ..addArc( Rect.fromCircle( - center: const Offset(1, dy), + center: const Offset(1, dy).mirrorConditionally(flipTail), radius: 6, ), -pi * startAngle, @@ -314,3 +322,10 @@ class ReactionBubblePainter extends CustomPainter { @override bool shouldRepaint(CustomPainter oldDelegate) => true; } + +/// Extension on [Offset] +extension YTransformer on Offset { + /// Flips x coordinate when flip is true + // ignore: avoid_positional_boolean_parameters + Offset mirrorConditionally(bool flip) => Offset(flip ? -dx : dx, dy); +} From 09cbec649fbe8309eddc914eb0e809345c20fff9 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Fri, 14 May 2021 15:51:54 +0530 Subject: [PATCH 04/15] alignment changes --- .../stream_chat_flutter/lib/src/message_widget.dart | 7 ++++--- .../lib/src/reaction_bubble.dart | 13 +++++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 711ae8ae..61b5d13f 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -507,13 +507,14 @@ class _MessageWidgetState extends State Flexible( child: PortalEntry( portal: Container( - transform: - Matrix4.translationValues(-12, 0, 0), + transform: Matrix4.translationValues( + widget.reverse ? 12 : -12, 0, 0), constraints: const BoxConstraints( maxWidth: 22 * 6.0), child: _buildReactionIndicator(context), ), - portalAnchor: const Alignment(-1, -1), + portalAnchor: + Alignment(widget.reverse ? 1 : -1, -1), childAnchor: Alignment(widget.reverse ? -1 : 1, -1), child: Stack( diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index 19bd5977..1929e5bf 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -51,7 +51,8 @@ class ReactionBubble extends StatelessWidget { Widget build(BuildContext context) { final reactionIcons = StreamChatTheme.of(context).reactionIcons; final totalReactions = reactions.length; - final offset = totalReactions > 1 ? 16.0 : 2.0; + final offset = + totalReactions > 1 ? 16.0.mirrorConditionally(flipTail) : 2.0; return Stack( alignment: Alignment.center, children: [ @@ -66,7 +67,7 @@ class ReactionBubble extends StatelessWidget { child: Container( padding: EdgeInsets.symmetric( vertical: 4, - horizontal: totalReactions > 1 ? 4 : 0, + horizontal: totalReactions > 1 ? 4.0 : 0, ), decoration: BoxDecoration( border: Border.all( @@ -106,6 +107,7 @@ class ReactionBubble extends StatelessWidget { Positioned( bottom: 2, left: reverse ? null : 13, + right: reverse ? 13 : null, child: _buildReactionsTail(context), ), ], @@ -323,3 +325,10 @@ extension YTransformer on Offset { // ignore: avoid_positional_boolean_parameters Offset mirrorConditionally(bool flip) => Offset(flip ? -dx : dx, dy); } + +/// Extension on [Offset] +extension IntTransformer on double { + /// Flips x coordinate when flip is true + // ignore: avoid_positional_boolean_parameters + double mirrorConditionally(bool flip) => flip ? -this : this; +} From 38e3d32bcb7949b1cf2d80115a5466735df3def6 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Fri, 14 May 2021 17:53:23 +0530 Subject: [PATCH 05/15] alignment changes --- .../lib/src/message_reactions_modal.dart | 12 ++++++------ .../stream_chat_flutter/lib/src/message_widget.dart | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart index 76ce215c..8d5b408e 100644 --- a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart @@ -112,12 +112,12 @@ class MessageReactionsModal extends StatelessWidget { Align( alignment: Alignment( user!.id == message.user!.id - ? (divFactor > 1.0 - ? 0.0 - : (1.0 - divFactor)) - : (divFactor > 1.0 - ? 0.0 - : -(1.0 - divFactor)), + ? (divFactor >= 1.0 + ? -0.2 + : (1.2 - divFactor)) + : (divFactor >= 1.0 + ? 0.2 + : -(1.2 - divFactor)), 0), child: ReactionPicker( message: message, diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 61b5d13f..8edc1cb1 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -602,7 +602,8 @@ class _MessageWidgetState extends State ), if (widget.showReactionPickerIndicator) Positioned( - right: 4, + right: widget.reverse ? null : 4, + left: widget.reverse ? 4 : null, top: -8, child: CustomPaint( painter: ReactionBubblePainter( From 08635729d566122c3bf8c6fe186444024b175845 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Fri, 14 May 2021 18:16:38 +0530 Subject: [PATCH 06/15] fix: Fixed threads --- .../lib/src/message_widget.dart | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 8edc1cb1..c30fc543 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -755,7 +755,7 @@ class _MessageWidgetState extends State mainAxisAlignment: widget.reverse ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ - if (showThreadTail) + if (showThreadTail && !widget.reverse) Container( margin: EdgeInsets.only( bottom: context.textScaleFactor * @@ -766,6 +766,7 @@ class _MessageWidgetState extends State painter: _ThreadReplyPainter( context: context, color: widget.messageTheme.messageBorderColor, + reverse: widget.reverse, ), ), ), @@ -781,6 +782,21 @@ class _MessageWidgetState extends State return mappedChild; }, ), + if (showThreadTail && widget.reverse) + Container( + margin: EdgeInsets.only( + bottom: context.textScaleFactor * + ((widget.messageTheme.replies?.fontSize ?? 1) / 2), + ), + child: CustomPaint( + size: const Size(16, 32) * context.textScaleFactor, + painter: _ThreadReplyPainter( + context: context, + color: widget.messageTheme.messageBorderColor, + reverse: widget.reverse, + ), + ), + ), ].insertBetween(const SizedBox(width: 8)), ); } @@ -1148,10 +1164,15 @@ class _MessageWidgetState extends State } class _ThreadReplyPainter extends CustomPainter { - const _ThreadReplyPainter({this.context, required this.color}); + const _ThreadReplyPainter({ + this.context, + required this.color, + this.reverse = false, + }); final Color? color; final BuildContext? context; + final bool reverse; @override void paint(Canvas canvas, Size size) { @@ -1162,12 +1183,13 @@ class _ThreadReplyPainter extends CustomPainter { ..strokeCap = StrokeCap.round; final path = Path() - ..moveTo(0, 0) - ..quadraticBezierTo(0, size.height * 0.38, 0, size.height * 0.50) + ..moveTo(reverse ? size.width : 0, 0) + ..quadraticBezierTo(reverse ? size.width : 0, size.height * 0.38, + reverse ? size.width : 0, size.height * 0.50) ..quadraticBezierTo( - 0, + reverse ? size.width : 0, size.height, - size.width, + reverse ? 0 : size.width, size.height, ); canvas.drawPath(path, paint); From 5f0ed1bfcbc8ec3e03f71b7c442e0d5097b98b4f Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Fri, 14 May 2021 18:19:19 +0530 Subject: [PATCH 07/15] fix: analysis --- packages/stream_chat_flutter/lib/src/deleted_message.dart | 2 -- packages/stream_chat_flutter/lib/src/message_widget.dart | 1 - packages/stream_chat_flutter/lib/src/quoted_message_widget.dart | 2 -- packages/stream_chat_flutter/lib/src/utils.dart | 2 -- 4 files changed, 7 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/deleted_message.dart b/packages/stream_chat_flutter/lib/src/deleted_message.dart index c29437cc..9a4e0ae2 100644 --- a/packages/stream_chat_flutter/lib/src/deleted_message.dart +++ b/packages/stream_chat_flutter/lib/src/deleted_message.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index c30fc543..781f9187 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -1,4 +1,3 @@ -import 'dart:math'; import 'dart:ui'; import 'package:flutter/cupertino.dart'; diff --git a/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart b/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart index 08b0c1dd..a7c7c798 100644 --- a/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/quoted_message_widget.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index e98c4755..d24ccc7e 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -1,5 +1,3 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; From 3dc4e9c0168417103ff88b142acb74bcd59aa7fd Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 17 May 2021 19:10:01 +0530 Subject: [PATCH 08/15] fix: paint bubble --- .../stream_chat_flutter/lib/src/reaction_bubble.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index 1929e5bf..afdf0ec5 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -260,8 +260,8 @@ class ReactionBubblePainter extends CustomPainter { ..style = PaintingStyle.stroke; const dy = -2.2; - const startAngle = 1.1; - const sweepAngle = 1.2; + final startAngle = flipTail ? -0.1 : 1.1; + final sweepAngle = flipTail ? -1.2 : 1.2; final path = Path() ..addArc( Rect.fromCircle( @@ -280,8 +280,8 @@ class ReactionBubblePainter extends CustomPainter { ..strokeWidth = 1; const dy = -2.2; - const startAngle = 1; - const sweepAngle = 1.3; + final startAngle = flipTail ? -0.0 : 1.0; + final sweepAngle = flipTail ? -1.3 : 1.3; final path = Path() ..addArc( Rect.fromCircle( @@ -301,8 +301,8 @@ class ReactionBubblePainter extends CustomPainter { ..style = PaintingStyle.fill; const dy = -2.2; - const startAngle = 1.1; - const sweepAngle = 1.2; + final startAngle = flipTail ? -0.1 : 1.1; + final sweepAngle = flipTail ? -1.2 : 1.2; final path = Path() ..addArc( Rect.fromCircle( From 80bc94ba386c801762e629f19b54d1a20dc89aa4 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Mon, 17 May 2021 20:17:33 +0530 Subject: [PATCH 09/15] fix: paint bubble --- packages/stream_chat_flutter/lib/src/reaction_bubble.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index afdf0ec5..ce75445b 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -156,6 +156,7 @@ class ReactionBubble extends StatelessWidget { maskColor, tailCirclesSpace: tailCirclesSpacing, flipTail: !flipTail, + numberOfReactions: reactions.length, ), ); return tail; @@ -171,6 +172,7 @@ class ReactionBubblePainter extends CustomPainter { this.maskColor, { this.tailCirclesSpace = 0, this.flipTail = false, + this.numberOfReactions = 0, }); /// Color of bubble @@ -188,6 +190,9 @@ class ReactionBubblePainter extends CustomPainter { /// Flip tail final bool flipTail; + /// Number of reactions on the page + final int numberOfReactions; + @override void paint(Canvas canvas, Size size) { _drawOvalMask(size, canvas); @@ -261,7 +266,7 @@ class ReactionBubblePainter extends CustomPainter { const dy = -2.2; final startAngle = flipTail ? -0.1 : 1.1; - final sweepAngle = flipTail ? -1.2 : 1.2; + final sweepAngle = flipTail ? -1.2 : (numberOfReactions > 1 ? 1.2 : 0.9); final path = Path() ..addArc( Rect.fromCircle( From 292c21004c6652a5f4d5911dee88407b3d316348 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Mon, 17 May 2021 17:03:57 +0200 Subject: [PATCH 10/15] fix action modal --- .../lib/src/message_actions_modal.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart index 82ce94e2..f0ce9539 100644 --- a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart @@ -173,12 +173,12 @@ class _MessageActionsModalState extends State { Align( alignment: Alignment( user?.id == widget.message.user?.id - ? (divFactor > 1.0 - ? 0.0 - : (1.0 - divFactor)) - : (divFactor > 1.0 - ? 0.0 - : -(1.0 - divFactor)), + ? (divFactor >= 1.0 + ? -0.2 + : (1.2 - divFactor)) + : (divFactor >= 1.0 + ? 0.2 + : -(1.2 - divFactor)), 0), child: ReactionPicker( message: widget.message, From 5155940ddd24ae9d5f791a06fa58239f1afda833 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 18 May 2021 14:39:01 +0530 Subject: [PATCH 11/15] fix: attachment borders --- packages/stream_chat_flutter/lib/src/extension.dart | 12 ++++++++++++ .../lib/src/message_actions_modal.dart | 6 ++++-- .../lib/src/message_reactions_modal.dart | 4 +++- .../stream_chat_flutter/lib/src/message_widget.dart | 1 + packages/stream_chat_flutter/lib/src/utils.dart | 3 ++- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/extension.dart b/packages/stream_chat_flutter/lib/src/extension.dart index a65272c3..3b6ba3e2 100644 --- a/packages/stream_chat_flutter/lib/src/extension.dart +++ b/packages/stream_chat_flutter/lib/src/extension.dart @@ -104,3 +104,15 @@ extension BuildContextX on BuildContext { double get textScaleFactor => MediaQuery.maybeOf(this)?.textScaleFactor ?? 1.0; } + +/// Extension on [BorderRadius] +extension FlipBorder on BorderRadius { + /// Flips borders (Y) + BorderRadius mirrorBorderIfReversed({bool reverse = true}) => reverse + ? BorderRadius.only( + topLeft: topRight, + topRight: topLeft, + bottomLeft: bottomRight, + bottomRight: bottomLeft) + : this; +} diff --git a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart index f0ce9539..c0a4acaf 100644 --- a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart @@ -189,8 +189,10 @@ class _MessageActionsModalState extends State { child: MessageWidget( key: const Key('MessageWidget'), reverse: widget.reverse, - attachmentBorderRadiusGeometry: - widget.attachmentBorderRadiusGeometry, + attachmentBorderRadiusGeometry: widget + .attachmentBorderRadiusGeometry + ?.mirrorBorderIfReversed( + reverse: widget.reverse), message: widget.message.copyWith( text: widget.message.text!.length > 200 // ignore: lines_longer_than_80_chars diff --git a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart index 8d5b408e..35cd45e3 100644 --- a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart @@ -144,7 +144,9 @@ class MessageReactionsModal extends StatelessWidget { attachmentShape: attachmentShape, padding: const EdgeInsets.all(0), attachmentBorderRadiusGeometry: - attachmentBorderRadiusGeometry, + attachmentBorderRadiusGeometry + ?.mirrorBorderIfReversed( + reverse: reverse), attachmentPadding: EdgeInsets.all( hasFileAttachment ? 4 : 2, ), diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index 42ce4947..dfacd111 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -16,6 +16,7 @@ import 'package:stream_chat_flutter/src/quoted_message_widget.dart'; import 'package:stream_chat_flutter/src/reaction_bubble.dart'; import 'package:stream_chat_flutter/src/url_attachment.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; +import 'extension.dart'; /// Widget builder for building attachments typedef AttachmentBuilder = Widget Function( diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index d24ccc7e..d8bbcde6 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:stream_chat_flutter/src/extension.dart'; /// Launch URL Future launchURL(BuildContext context, String? url) async { @@ -333,7 +334,7 @@ Widget wrapAttachmentWidget( BorderRadius borderRadius, ) => ClipRRect( - borderRadius: borderRadius, + borderRadius: borderRadius.mirrorBorderIfReversed(reverse: reverse), child: Material( clipBehavior: Clip.antiAlias, shape: attachmentShape, From 9e9cd2b66f8a0a7369281ecb0d77e4390cee2782 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 18 May 2021 15:22:41 +0530 Subject: [PATCH 12/15] fix: attachment borders --- .../lib/src/message_actions_modal.dart | 2 +- .../lib/src/message_list_view.dart | 23 +++++++++++++------ .../lib/src/message_reactions_modal.dart | 2 +- .../lib/src/message_widget.dart | 10 -------- .../stream_chat_flutter/lib/src/utils.dart | 14 ++++------- 5 files changed, 23 insertions(+), 28 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart index c0a4acaf..5336ed48 100644 --- a/packages/stream_chat_flutter/lib/src/message_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_actions_modal.dart @@ -192,7 +192,7 @@ class _MessageActionsModalState extends State { attachmentBorderRadiusGeometry: widget .attachmentBorderRadiusGeometry ?.mirrorBorderIfReversed( - reverse: widget.reverse), + reverse: !widget.reverse), message: widget.message.copyWith( text: widget.message.text!.length > 200 // ignore: lines_longer_than_80_chars diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index c0b8ac0d..c24ceb00 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -980,14 +980,23 @@ class _MessageListViewState extends State { onReplyTap: widget.onReplyTap, attachmentBorderRadiusGeometry: BorderRadius.only( topLeft: Radius.circular(attachmentBorderRadius), - bottomLeft: Radius.circular( - (timeDiff >= 1 || !isNextUserSame) && - !(hasReplies || isThreadMessage || hasFileAttachment) - ? 0 - : attachmentBorderRadius, - ), + bottomLeft: isMyMessage + ? Radius.circular(attachmentBorderRadius) + : Radius.circular( + (timeDiff >= 1 || !isNextUserSame) && + !(hasReplies || isThreadMessage || hasFileAttachment) + ? 0 + : attachmentBorderRadius, + ), topRight: Radius.circular(attachmentBorderRadius), - bottomRight: Radius.circular(attachmentBorderRadius), + bottomRight: isMyMessage + ? Radius.circular( + (timeDiff >= 1 || !isNextUserSame) && + !(hasReplies || isThreadMessage || hasFileAttachment) + ? 0 + : attachmentBorderRadius, + ) + : Radius.circular(attachmentBorderRadius), ), attachmentPadding: EdgeInsets.all(hasFileAttachment ? 4 : 2), borderRadiusGeometry: BorderRadius.only( diff --git a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart index 35cd45e3..5f3bc5a4 100644 --- a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart @@ -146,7 +146,7 @@ class MessageReactionsModal extends StatelessWidget { attachmentBorderRadiusGeometry: attachmentBorderRadiusGeometry ?.mirrorBorderIfReversed( - reverse: reverse), + reverse: !reverse), attachmentPadding: EdgeInsets.all( hasFileAttachment ? 4 : 2, ), diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index dfacd111..a2d19c7e 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -131,8 +131,6 @@ class MessageWidget extends StatefulWidget { ), border, reverse, - attachmentBorderRadiusGeometry as BorderRadius? ?? - BorderRadius.zero, ), ); } @@ -157,8 +155,6 @@ class MessageWidget extends StatefulWidget { ), border, reverse, - attachmentBorderRadiusGeometry as BorderRadius? ?? - BorderRadius.zero, ); }, 'video': (context, message, attachments) { @@ -191,8 +187,6 @@ class MessageWidget extends StatefulWidget { ), border, reverse, - attachmentBorderRadiusGeometry as BorderRadius? ?? - BorderRadius.zero, ); }, 'giphy': (context, message, attachments) { @@ -219,8 +213,6 @@ class MessageWidget extends StatefulWidget { ), border, reverse, - attachmentBorderRadiusGeometry as BorderRadius? ?? - BorderRadius.zero, ); }, 'file': (context, message, attachments) { @@ -248,8 +240,6 @@ class MessageWidget extends StatefulWidget { ), border, reverse, - attachmentBorderRadiusGeometry as BorderRadius? ?? - BorderRadius.zero, ); }) .insertBetween(SizedBox( diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index d8bbcde6..159c02e0 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -331,14 +331,10 @@ Widget wrapAttachmentWidget( ShapeBorder attachmentShape, // ignore: avoid_positional_boolean_parameters bool reverse, - BorderRadius borderRadius, ) => - ClipRRect( - borderRadius: borderRadius.mirrorBorderIfReversed(reverse: reverse), - child: Material( - clipBehavior: Clip.antiAlias, - shape: attachmentShape, - type: MaterialType.transparency, - child: attachmentWidget, - ), + Material( + clipBehavior: Clip.antiAlias, + shape: attachmentShape, + type: MaterialType.transparency, + child: attachmentWidget, ); From 54c5b288d0de69dc861e2f3fef39f8e2b6b62cba Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 18 May 2021 15:34:37 +0530 Subject: [PATCH 13/15] fix: analysis --- packages/stream_chat_flutter/lib/src/message_widget.dart | 1 - packages/stream_chat_flutter/lib/src/utils.dart | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index a2d19c7e..97e061ae 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -16,7 +16,6 @@ import 'package:stream_chat_flutter/src/quoted_message_widget.dart'; import 'package:stream_chat_flutter/src/reaction_bubble.dart'; import 'package:stream_chat_flutter/src/url_attachment.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; -import 'extension.dart'; /// Widget builder for building attachments typedef AttachmentBuilder = Widget Function( diff --git a/packages/stream_chat_flutter/lib/src/utils.dart b/packages/stream_chat_flutter/lib/src/utils.dart index 159c02e0..5a86d4ef 100644 --- a/packages/stream_chat_flutter/lib/src/utils.dart +++ b/packages/stream_chat_flutter/lib/src/utils.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:stream_chat_flutter/stream_chat_flutter.dart'; import 'package:stream_chat_flutter_core/stream_chat_flutter_core.dart'; import 'package:url_launcher/url_launcher.dart'; -import 'package:stream_chat_flutter/src/extension.dart'; /// Launch URL Future launchURL(BuildContext context, String? url) async { From 13cc5f1c4b0a6fad8aea58c3f7a3defeaa6d90fb Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 18 May 2021 15:47:38 +0530 Subject: [PATCH 14/15] fix: update goldens --- .../src/goldens/deleted_message_custom.png | Bin 2936 -> 2334 bytes .../test/src/goldens/deleted_message_dark.png | Bin 2785 -> 2262 bytes .../src/goldens/deleted_message_light.png | Bin 2750 -> 2161 bytes .../test/src/goldens/reaction_bubble_2.png | Bin 2955 -> 2937 bytes .../test/src/goldens/system_message_dark.png | Bin 1812 -> 1679 bytes .../test/src/goldens/system_message_light.png | Bin 1866 -> 1746 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/stream_chat_flutter/test/src/goldens/deleted_message_custom.png b/packages/stream_chat_flutter/test/src/goldens/deleted_message_custom.png index c464bc01de48fcef06c538bd284ed284370f55aa..693db3c78ee724f41d6376bd5c7ba1eb1385750d 100644 GIT binary patch delta 1816 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 h$U5GC0pAKv z4-*p;<;L15EYl^oH9Thj_h-*O6$Oz!wmIeJ=S?D&!PzAxK481cqK19J`T+_?jn;C# z93aJH%bvSZsq__yPgd4f#JISyxHvR8jjS_EO6SJb3wkQo=0-_*=8X1M@zNjv`fMya z_baXO-Y$tuhH`iR?b(KGe$O0Kt(a!2-)mG#Sov@y@bi{9mjp*{rv!c=M$UXyS}Fw+ zw~16y^x}m}!;juH8V%ZpCKk(pTeA-8=;#2#1Ox^3EiS%{m6Y=N?-EBqfB`-tl9F&> z^KYqU%k&iCmHbelR6bm_&BpidADXjH%J28B>Lg)I1W`ZykX9YUOW9O}_V)Dr#o@H$ z>UzrC=n;Aq!vh01e(ZTjm;3knE&8fxlAsX8|Mr4_V(WT=sTgb1zI$R z2bGre6_XanE6IHo39#v{l2gnMskE0Potg0t4Q1uzWa2~5=4|; zfu{IF&0O+OYW;R8V@uXJ*TC?P(K%6l{cT@%Hh|jlSi`OwmAtCc?lVJX1j}zBVQ58o ztia9!fzVOqFbz8dSS=ZPw^d6=a+BcP&}Qw4Y)#8G7*?!LBod<>?AvY+s_t`A!RxsL z!qBmN&@CE;qH#i^FCeri%>_VMbLC~qRu1hYp?q_=x_i@d2GFV2M1%TiQ5w=T5d)5n zO;y^~lW{278;_q=R!=?3GD!%aJ Goqqs9Ee-zw diff --git a/packages/stream_chat_flutter/test/src/goldens/deleted_message_dark.png b/packages/stream_chat_flutter/test/src/goldens/deleted_message_dark.png index 7db0a6ef17a3f5586f9a0f7d67b1f49dd6fd5b60..d9bb3138bf3a71dbde33bda6e4605afbe76b5146 100644 GIT binary patch delta 1719 zcmV;o21xng71j}uKyCE<|^YbkM_@IGa4*)pNlTiU$lVAZ$lVAZ$lVAZ2F(iAn;loy|SDQv38b~C1 zvfZ8q(rUGI*lH=!qa8h$9}k1j+Y!SJvo$#EPx$@hPICYR01aUAW`YG*yPGjn_lYH!}0YTeTwi(EFV zzkUDxnT+c^x)^_f1VQ`_e|Opt3=eC3d|dTV1UXH&em(6NClac3n+NssFR4S?2Y)X>S zsgw${v+_JoVHj$qT-MgsR@Y^&>#8t2t1r@NNz$wBZIypYC52HGe{C+C)!^Wu_V@R- zy}hj<2=vcifBoR{rBdmmSKfEW?oF zKJ0qzx{a&fTuP_YfA7VHTkXFG`4qp+`)#qPN~NMJSFR`u!}z3{$>%k2>5|^mY8o9G z(UWpnl2m`3o0I2x`t8vpRVo#Yjg86oeO0T~IDq>PAL{YSiY|ZlnX=QV;9HTCFC}^Wv|QB+qpvNoyM$y8qxo*JYA) z|G|HQ_=Ilm?{|!|FgvTKm5SCkHWWsYwyRZz?U-HHjqh;Bac@_v@t96>T~||6Q}MdT z$iD48eXrH|Eb8~vyzH(g+0RjVnV%PE)5DvTnnZ*0hQU3s1tU&XElfgY7g@pD7RYYl%7 z%k?~!+VgYY_jP-5@qf=4A6eFDG<17$QBNxsmCI#?QKZ7mjQqhtNs8ZDJH8ShZ|gYh zAPDq)b2ENzi|4u>uk-FPu=elW=MQV$U!Z6f+v)Of-<2dm)GMS9V z$H(K7YxAAJUKC!hQVsu?`Op6-ANqxt#v}`|o*_|KpnNW;q~qxM^XJ;#+k1a+pBs&af*{cB*I#RFY)oMocH9-L{hRpmONCK%s$(%Q zFraiQrKzbYy?FIX2L}h{`rXF$XY}$RJuyE&-;@7d!K>sH6~X}(z0(@KRn`aoFUKcx4AwT%tU z7mM;dPxX3TOQlj@|M2XugeexzHKtg=IYuCWfj|HQfdB>q0Sp8J7<&41kQSd2f-YJ; z{)mj81(HZ4xP76kUVlVJ&jRV?hoS(d#YG&GApwe$U;#^$U;!x>_%Fneu2z=3CMo~` N002ovPDHLkV1k_0l*0f3 delta 2230 zcmV;n2ub(W5#be(Kx_(&Nkl?)dLhd1;NlrLHLns#kaa*+u)$L5{ zT6a79U+sU@+8L+Sb~qt{14Qpb`j}kRVA&_6I@+Z{OI<7-HYApLCwbljp#B zpGyLIPM$p35P+BRc6tH8K}M0$+LK@bB`$-nQ!l(zuWP5?=+w)ji}ZLs>hX5wT;8!j zB+2Xb$m8*JatS!#8ja4LM7hNRlRyC$e}=avkZ?GxP$=}u@nA5ha5(%{e=vFa)G1{$ znYQzKqfvb@JFDK_-Z!wS*I(B`^i~8C3I=uI{CWN5lTYM*$&Vz&Vln;o!UbJ8fBvQ8 zZ-YoUtRsViul32Z>$*xgj-Eb!+IDVlG^)(eqrdpX@^jX85WN*gOEQ^k{W%(qe?Bwj z@p$yd)2Ag##bQxAJ3DW5ZEs4_aU@BrtE+A2I?1F;rIKp3THCqfN>t8h51)wMNc1_qQ)r}g>8i!bbNI2_jbbLZso zc$8aR)!68$d_JF+mX_M?UteEe>)%;(?<_1R6b{Sh^J#s3UDax}?Y7&ks~dHFAfaGT z!9YN{wKc^P3B_Wu*4X=}PpecasZb~=?Ydga=jHeN_2JpGdidy(f397>E=f8wJF9p+ zE=ii4m{2Gf)Mpnjs#dG%$l#zRjvbTN>(#OG@mG%ZMx*k0Jo@(PRps+}`FuY8?bA;c z3r8&@_H9+GRSjh_dhgwL^@kHD z^ws6dDwWIT*xng`C7092#)iVpx13kk)|5yj(vLdvwHgUss4NGmJ-d&|K9UQAP`VKpV!szzH4p6V%i(@(qWI(xQtrjAA;l6HTK za?e02f2B&LqOGkhg+d`U8jY8(>3NYzM2$wHHRkbnluRbI^7wJv{d@lT!=&CH*vH1?p0qbrYqlk(>mxSwIV8)%ZkV28X6kXlZ_1x z4-f0mp+mZS<%$MfS3^TXs#Gc}mCG8+WK^%$e|OLFV`Hxz+q+ssA`vB%NxhTJDjtvP zLG$5st9b^Unw-?_J9m_JUAeBS<%bU?Nu^RrDaX;&jnj%YBQ zRyLcJB>nT+HC3xs6^ca-rqdc48q#n!t6Ht5>vMA|7K`TCcBLXGnbcr9t<2G*+ANjS z+uN&^Tu!U2tJ>Pyl9Nm-nMi0TlWEVO_d(N%eiVQ9j@91^smns9-RtN~QA35Adx0d)>KSuUCGbPutI3 z#jI_&Ti4IkXf))JexLtoLnl4|P2X?tU6|iuED#9j&*#o*C709Vl@+-I14=oLzP)<& znK-1^3uDjTJ58?~H}>y!=ho}>X_t;!+ith6Zu3_BsL4TAsZ{jC+?>LpkftUl<@fvb zkMF;4JqO@m``una-lV1F<<{pV=q_AA00V&l1_A*L1OgZc1TYW?VCd-Ey!CoRQg{BY zGTxjXZ|DA_jgAG<lY3<4pEcg2j7wZA{WE|0l%51RqPmgaR2}S07*qoM6N<$ Ef*kF!`v3p{ diff --git a/packages/stream_chat_flutter/test/src/goldens/deleted_message_light.png b/packages/stream_chat_flutter/test/src/goldens/deleted_message_light.png index d5a453ffc0cf157efe7d6a8e84648ab9a4a90530..1f6330eb9bd92be6130bae15872bfe6d51878d88 100644 GIT binary patch delta 1615 zcmV-V2C(_Q74Z;|Kz|4uNklLx2g!BEI-42W6ODdH5(ESyy6gwnH+%rXA?#h&NE7<+wo zGSkdGleuQ@iLnpjIQ}I7SNhMm2LRk<1OgZc1TYW?U?32{K$E@+>61_a2Rx?6wc(SK z6ZLw%acv$GB$Y~Oetv!|+a6mWQ55O;_*l-laSZ_zAdX}G`t|G23q+EfbDEu<9p?}L z6VH=j0UCez$j6T#)oeCLt{2C#Ha0dChT$!Y>gMCRi|$Pz8yg$i+}yl!SscgO+}yl& z`F(MCc&L0nKXSbw2;`hoCX=~^QQdr8chS8FBnSdYXCcIKd}+Dod5Ys$3kwUkJ+xah zI0m^~?ndk0^jLVFrw<=K+{(D_qI(m_;0?bxZ3usYKzn<8%4V|@`zGDQ@0|2O5Zw4! z{LZ@n>$vWsv3^UO&$k3|@Us@Ln1&ZbDc zUQa74DDv+>J&VUftI4|3 zKLM<)tZ03GU4=qH+uPeCm-Tu*)oL~6ayfskudi!uZB6_8`^g>6_kGptbuBI~s#>k8 zTrO*8XD11u)9J|bJeA93t*@^upUjsmS;JdWXk9BilXS!{`Pu3?dkeK+I-BQ@+Q0Kto|~+j&1RE3ptb&}aZRd;pJJVV z6Ph=222L-uYPGJ}-ilSr;(phYA949BWB-LuQp)p-GclUi?*=%;`6R7hi{iyv5f?#O6 zIBMPVC%3i!sBulIdlAU_D^;u2lIMAH≪w6h+B8hlht+US3X4l8dj^>-B$<`FR+I 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 literal 1812 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 GGywo&aKg+0 literal 1866 zcmeHI`%}_c6vr~hn9R~@OEhTKO4-aElX6{=LPOD1M8#G`+)9{)wuea;XR|jx#XuiI^SobqAZlN2l4Q$g7syqt+CTM%jqkq8%|yZ5$fSJ z)U$HwMKfs`hcmm+TicNWHJM))X^;#_33RC*V^JgySgAU z^j=*RBCAV~RqJ%W5XnrY7%#jtJO2dD%K~;)DOhjsAplcrt{s{hR?vhbe{Dhp()%*$ z0XcNfmN2*cSME$YouG`XH7=d;c!(DY{2j~2$LVWUrOWH|LncOD9-l9(ttAZ_6f@gy zK7A~e3iI-|Jd#MNNlq;Jmfma?-*tr}=J&6s)9Ihy_k2G!*bw4MYt<|)$b*YKggrf> zQ~gq(2V|nHt?h@&$)3^Cie0;RZ|3@b`l#F2l5D_peer6wI*LY%1n9TpQXjJRivfti zhSOrPI55Y*V*kv-XFZy)f}5|Bb4-%Fyu3|d_h_dr27__7yY;eoX}k*&@3w8H&DtS( zQXrK|y|l8tWX;g)_42bL8J?b=_c~96qj?FOv2#rWv48{V(Ib&Hu@T_D%Bm{xI)Tw> zbXh#bLM|45*_GS*UIT?CFqvWQcG~{_`&m!RfbETGL=gf1XkNhGiu81|BsM$YMG5wj zX}UPu;pa-Dkxgx82Vt>Tutt7<^6ooBBYXN4H1VQT|4~<0NH6hDi83U|s8lM?- z=H|_}2t3u;rgawj?&Zb#x`KiNO>b}6+qb`B+}$1l(IePr2Xrh7$22{3zP`S`@`M`%LC!%z zLC(B@lgE!AS7VfMq_=01)jAUspmTJ#;X37ZE}mz5*i(Mox>!m#eg1s1PePR^PGoQQ zN)}{fWXKr^1i}u1P=jE|8XHB&q@r_8dx!}v7LZMR{9zzTfSbIRABN^tQ@=KkY#S|n z{W^AR?&8ytvk~ac#FdM;ym7c1p>W6H@=!3m(}t^P=`-Qlnwox+$z%}8Nz~9_;v466 zAGzGMNf$1N6$+YZW;jwv`m5tM@`^_^l^TKO^}cx{0FmN#(U}|<7Z>OJBOie5;F;|K zyKZ7mc(A>_-Oj-wA~CV9HFc?4C=}8LCKz?OofQNELDSPC1X5gHP6Y^%-N&T& z|LEx81y?ao53Ej4>n_FB;fd3FiJRIyR!N* Date: Tue, 18 May 2021 12:34:35 +0200 Subject: [PATCH 15/15] regenerate golden --- .../src/goldens/deleted_message_custom.png | Bin 2334 -> 2936 bytes .../test/src/goldens/deleted_message_dark.png | Bin 2262 -> 2785 bytes .../src/goldens/deleted_message_light.png | Bin 2161 -> 2750 bytes .../test/src/goldens/reaction_bubble_2.png | Bin 2937 -> 2920 bytes .../test/src/goldens/system_message_dark.png | Bin 1679 -> 1812 bytes .../test/src/goldens/system_message_light.png | Bin 1746 -> 1866 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/stream_chat_flutter/test/src/goldens/deleted_message_custom.png b/packages/stream_chat_flutter/test/src/goldens/deleted_message_custom.png index 693db3c78ee724f41d6376bd5c7ba1eb1385750d..c464bc01de48fcef06c538bd284ed284370f55aa 100644 GIT binary patch delta 2416 zcmXArc~n#97R9U9ieQCW;#h`i3J8i+$YTbzfCOYrVi*#rr3#1;5JJEJSEQ)43sVw8 ztP!xHrXhqpjA0(7JSHK6Kx9UykVL`^CSmAD-(B~wyY4!7pMCcEeK+sGr-Q$rgEWpK zoz9~Z9?uRBqK*;unin+p{-V!{HamRo)L6pP0QrsPtS+0ps8_jN$7K29^hRg0_}j*? z<^`v~XH#ZpZ%;kE@Z`hqv0v*8chg{QiWgE8V@!p3cVu7~nKCFR^XrD;+?J`EyLTkO zDTBK{^E|tA$G*>Z9#;F@OiS%YeXV+$nc91r*^VQS@vv_F`3$EE6}V1C`qut@p?JNJ z$0L!g9{h?k#YU60Y;A1=f`bj!U8(CSbpZhZXn)D(!r;oem;FV3B9Wl1OgwEC{W`%; z*M4L9-J)tk{-CkLaCC4Gb?V@W{olm+u6~K#mC^LmK!1NsteRCre0=5@p$guVSMbUYs$q-f%ZG-rIE}w&TMxC}W2)3i-8&lD zd*O7qlXN$oDmz-M5#5dL9lcRI^L6ZolGyR)O*W1|CI^0q_6rOQ+r=_J)lB`Dt2D%x+DeQ)Z^Rse!C1m#6@XQ~Vu17_A!eFrPM0gwy4L{%$85!A1 zEGsKR*xIVfG*3ZS|1I?M)vHYkYh8+7z-1%t;BSGUtiA7)Z0s{j0|XRB!S>gwXv~z z?CAB}S2;m()XsE)seRrvIy(2!tODoh?(QA{MCoh2T@pIZRi}0a7$7w?G{7XfJ3AlT zB9nXj`z0T7;M0#DKSo;|#Y9GOD=RB4936QYhfG^07L4+R5um;H_V&W!;ywJ%; z6Trdlbd5vH-R@`D-bOP6f(Y zm><|^X$$U3LV{mPT`B>WAg3w-GlpF>FVP^J3 zsZ>%ak(nGEJz2j=anbBBIwYiEX(X4;KH2os_jsr_$=`8(KFxgVFc|d6NS>W8C1qm; zi&U|$A`l4bGpY1CQnfXIrh5KP=VR-Fyu3VWI{-mvz9WxLhk1B-oTRn7QXesyf~qPG z(~?lgVqNU$=%8*^D|)-S{_O3=L`Fpw3IrHS!bmn8xbI3eFMjHG>P1tN^OyVfK~@)6 z#(S$)SK~cAJs%B{q5)e7b#&a?nAp6i*%VQH6SJD?bo{HtnxNe~cYvGA<(>rl3|tU* z=Ax35Ykn$u2zrDg`F#GOBB|{fzq89;OU+1I9Z6NHRA8Z<>!u`?yes*6UbU9S4mVO}skH>(4nDDA^h7EOZcADGR7>7I7k2~LOYjY!#NbM8W zNjg`rU31Z;H1Fkq@@raJ_uUrjbA1@NAQt<|ws*n?mikH{Kq{BQboSrFpil*yn<>r( zK1j&(Ex*6$PQ#NC@|?Z+d-e1?V4buxoU$(&K)oUntG3qR^y$;v`R8yrAm`1d?Nc`^ zVD;}4NvB}M8o=BX0sGD=i0ORBH;gpHCdL?Nt zFE4qupE|fUzup*N2_Tv4saN^mD_lnli=Q8W7!bE(u%K6xuyQ>%76s`gFK2<7$38Q4 zL1VEjfdJv*<;8ja+!=*J0q%>QyEC>?B9VkEHc}847Gc1IARhKlZ h$U5GC0pAKv z4-*p;<;L15EYl^oH9Thj_h-*O6$Oz!wmIeJ=S?D&!PzAxK481cqK19J`T+_?jn;C# z93aJH%bvSZsq__yPgd4f#JISyxHvR8jjS_EO6SJb3wkQo=0-_*=8X1M@zNjv`fMya z_baXO-Y$tuhH`iR?b(KGe$O0Kt(a!2-)mG#Sov@y@bi{9mjp*{rv!c=M$UXyS}Fw+ zw~16y^x}m}!;juH8V%ZpCKk(pTeA-8=;#2#1Ox^3EiS%{m6Y=N?-EBqfB`-tl9F&> z^KYqU%k&iCmHbelR6bm_&BpidADXjH%J28B>Lg)I1W`ZykX9YUOW9O}_V)Dr#o@H$ z>UzrC=n;Aq!vh01e(ZTjm;3knE&8fxlAsX8|Mr4_V(WT=sTgb1zI$R z2bGre6_XanE6IHo39#v{l2gnMskE0Potg0t4Q1uzWa2~5=4|; zfu{IF&0O+OYW;R8V@uXJ*TC?P(K%6l{cT@%Hh|jlSi`OwmAtCc?lVJX1j}zBVQ58o ztia9!fzVOqFbz8dSS=ZPw^d6=a+BcP&}Qw4Y)#8G7*?!LBod<>?AvY+s_t`A!RxsL z!qBmN&@CE;qH#i^FCeri%>_VMbLC~qRu1hYp?q_=x_i@d2GFV2M1%TiQ5w=T5d)5n zO;y^~lW{278;_q=R!=?3GD!%aJ Goqqs9Ee-zw delta 1816 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 Ef*kF!`v3p{ delta 1719 zcmV;o21xng71j}uKyCE<|^YbkM_@IGa4*)pNlTiU$lVAZ$lVAZ$lVAZ2F(iAn;loy|SDQv38b~C1 zvfZ8q(rUGI*lH=!qa8h$9}k1j+Y!SJvo$#EPx$@hPICYR01aUAW`YG*yPGjn_lYH!}0YTeTwi(EFV zzkUDxnT+c^x)^_f1VQ`_e|Opt3=eC3d|dTV1UXH&em(6NClac3n+NssFR4S?2Y)X>S zsgw${v+_JoVHj$qT-MgsR@Y^&>#8t2t1r@NNz$wBZIypYC52HGe{C+C)!^Wu_V@R- zy}hj<2=vcifBoR{rBdmmSKfEW?oF zKJ0qzx{a&fTuP_YfA7VHTkXFG`4qp+`)#qPN~NMJSFR`u!}z3{$>%k2>5|^mY8o9G z(UWpnl2m`3o0I2x`t8vpRVo#Yjg86oeO0T~IDq>PAL{YSiY|ZlnX=QV;9HTCFC}^Wv|QB+qpvNoyM$y8qxo*JYA) z|G|HQ_=Ilm?{|!|FgvTKm5SCkHWWsYwyRZz?U-HHjqh;Bac@_v@t96>T~||6Q}MdT z$iD48eXrH|Eb8~vyzH(g+0RjVnV%PE)5DvTnnZ*0hQU3s1tU&XElfgY7g@pD7RYYl%7 z%k?~!+VgYY_jP-5@qf=4A6eFDG<17$QBNxsmCI#?QKZ7mjQqhtNs8ZDJH8ShZ|gYh zAPDq)b2ENzi|4u>uk-FPu=elW=MQV$U!Z6f+v)Of-<2dm)GMS9V z$H(K7YxAAJUKC!hQVsu?`Op6-ANqxt#v}`|o*_|KpnNW;q~qxM^XJ;#+k1a+pBs&af*{cB*I#RFY)oMocH9-L{hRpmONCK%s$(%Q zFraiQrKzbYy?FIX2L}h{`rXF$XY}$RJuyE&-;@7d!K>sH6~X}(z0(@KRn`aoFUKcx4AwT%tU z7mM;dPxX3TOQlj@|M2XugeexzHKtg=IYuCWfj|HQfdB>q0Sp8J7<&41kQSd2f-YJ; z{)mj81(HZ4xP76kUVlVJ&jRV?hoS(d#YG&GApwe$U;#^$U;!x>_%Fneu2z=3CMo~` N002ovPDHLkV1k_0l*0f3 diff --git a/packages/stream_chat_flutter/test/src/goldens/deleted_message_light.png b/packages/stream_chat_flutter/test/src/goldens/deleted_message_light.png index 1f6330eb9bd92be6130bae15872bfe6d51878d88..d5a453ffc0cf157efe7d6a8e84648ab9a4a90530 100644 GIT binary patch delta 2211 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≪w6h+B8hlht+US3X4l8dj^>-B$<`FR+I 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 WMtx2FJ+qtu0000#)RxWP1EP?e> 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 diff --git a/packages/stream_chat_flutter/test/src/goldens/system_message_light.png b/packages/stream_chat_flutter/test/src/goldens/system_message_light.png index 32c2196cf3616acd94887e02b232c13f333e2d99..d82d8d609c2e3f352ef20dc48029787c3ac8cad5 100644 GIT binary patch literal 1866 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 GGywo&aKg+0