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; +}