From dd88cecedce433610fd19a7eea0adc95dcec63f5 Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 9 Apr 2021 11:38:25 +0200 Subject: [PATCH] fix reaction bubble --- .../lib/src/reaction_bubble.dart | 114 +++++++++--------- packages/stream_chat_flutter/pubspec.yaml | 2 +- .../test/src/goldens/reaction_bubble_0.png | Bin 410 -> 636 bytes .../test/src/goldens/reaction_bubble_2.png | Bin 3339 -> 3179 bytes .../src/goldens/reaction_bubble_3_dark.png | Bin 1976 -> 1935 bytes .../src/goldens/reaction_bubble_3_light.png | Bin 2067 -> 2064 bytes .../src/goldens/reaction_bubble_like_dark.png | Bin 1494 -> 1517 bytes .../goldens/reaction_bubble_like_light.png | Bin 1291 -> 1296 bytes 8 files changed, 57 insertions(+), 59 deletions(-) diff --git a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart index 160c0579..51ec7aa5 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_bubble.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_bubble.dart @@ -37,70 +37,68 @@ class ReactionBubble extends StatelessWidget { return Transform( transform: Matrix4.rotationY(reverse ? pi : 0), alignment: Alignment.center, - child: Center( - child: Stack( - alignment: Alignment.center, - fit: StackFit.loose, - children: [ - Transform.translate( - offset: Offset(reverse ? offset : -offset, 0), + child: Stack( + alignment: Alignment.center, + fit: StackFit.loose, + children: [ + Transform.translate( + offset: Offset(reverse ? offset : -offset, 0), + child: Container( + padding: const EdgeInsets.all(2), + decoration: BoxDecoration( + color: maskColor, + borderRadius: BorderRadius.all(Radius.circular(16)), + ), child: Container( - padding: const EdgeInsets.all(2), - decoration: BoxDecoration( - color: maskColor, - borderRadius: 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, - ), - color: backgroundColor, - borderRadius: BorderRadius.all(Radius.circular(14)), - ), - child: LayoutBuilder( - builder: (context, constraints) { - return Flex( - direction: Axis.horizontal, - mainAxisSize: MainAxisSize.min, - children: [ - if (constraints.maxWidth < double.infinity) - ...reactions - .take((constraints.maxWidth) ~/ 24) - .map((reaction) { - return _buildReaction( - reactionIcons, - reaction, - context, - ); - }).toList(), - if (constraints.maxWidth == double.infinity) - ...reactions.map((reaction) { - return _buildReaction( - reactionIcons, - reaction, - context, - ); - }).toList(), - ], - ); - }, + decoration: BoxDecoration( + border: Border.all( + color: borderColor, ), + color: backgroundColor, + borderRadius: BorderRadius.all(Radius.circular(14)), + ), + child: LayoutBuilder( + builder: (context, constraints) { + return Flex( + direction: Axis.horizontal, + mainAxisSize: MainAxisSize.min, + children: [ + if (constraints.maxWidth < double.infinity) + ...reactions + .take((constraints.maxWidth) ~/ 24) + .map((reaction) { + return _buildReaction( + reactionIcons, + reaction, + context, + ); + }).toList(), + if (constraints.maxWidth == double.infinity) + ...reactions.map((reaction) { + return _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), + ), + ], ), ); } diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index 711802ca..522a7203 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: rxdart: ^0.26.0 scrollable_positioned_list: ^0.1.8 jiffy: ^3.0.1 - flutter_svg: ">=0.21.0-nullsafety.0 <0.21.0" + flutter_svg: ^0.21.0 flutter_portal: ^0.3.0 cached_network_image: ">=3.0.0-nullsafety <3.0.0" shimmer: ^1.1.2 diff --git a/packages/stream_chat_flutter/test/src/goldens/reaction_bubble_0.png b/packages/stream_chat_flutter/test/src/goldens/reaction_bubble_0.png index 12a654b9e6433499e1ff4a3a88d9540f98a8e299..18f898adb07837f8c009c64e1ad0d67f67e7b100 100644 GIT binary patch literal 636 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 literal 3339 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 diff --git a/packages/stream_chat_flutter/test/src/goldens/reaction_bubble_3_dark.png b/packages/stream_chat_flutter/test/src/goldens/reaction_bubble_3_dark.png index 2bb180b9394599a9b6533c197f95903b93fbda39..9ee602b39480ddd7d8406ab5b4b0dc1781d4394a 100644 GIT binary patch delta 1638 zcmV-s2ATP|504L!L4P?(L_t(|obBB^j~mw+#_{LeW`?uMF6BfkH!%=Et0Fd#!l`^I zf~1g>50M~1>J$l(Hpn+fn~&f=ac;dErwFWV;s6G06&95s%k_$!%b9ah3`t$ALT-Fq1d|A(KD>8IwQ(8IwQ( z8IwQ(8IwQ(7Jp*5u~BU-v@uZ1Kq&>KccaS~0%DAau|a4WgvMX>kb0-k*Y{Q{1!Eno zO#r2O+2r8G2=6O2z6Rp;_2yB1k`nnsw`2} zRr`Y&QCG#a*yC&*j7?G)n*adPG((=}Fj~Vm4SdreE`MIcU7)pwQVP}>SYyzHfZ1$@ zvMc}qjj!OV@`^{fnT>+6Nd{vb0N~(Y3}-E>x<>7X|4!WUzAcvlXee0ot_|sFz7u^r|FBaZgm(Mk8dJ| zfTAoJ%YO^R7*UiZ5F-u_#sJX1(acsRs9PrwMyd7$7wusvhJd1~`X1M{vwV$~(YPcV zF~5mj9y&vO7zUVqCW5e1`-1(ZVK5*V#J&4%tC-NE7E zEqwpYH^tArjQZ7kX!c)6`JG>EW&4|szxEzRYb37SQxEN2Mi`6%0Hj$4-!z?m;nC3% z0APB0+UfZhsc*jr0MPRXTiJdeA-2YH?Ptv_|Z3_4X$}eh*pN&afU% zCdkqhhlhs%fX_bvT)e&K&A#`0M7IwBFsH|eZXeD5>i_`z-w!w5eqZB{F|KAv3d5Qy zi7wow`8NOnx4v}?XS12;7rpcLTX^T~w|~z4`N#K<@y9=XAll~Bio3r?arCQmf1W&e zANfCj*?IeYkN-xV{n~5amW@itzq0-xb5nhfUu%tKaY*lSXunFrVA`Ws41Yni zC~A3}U+0rg{w*2GGn)N3E_{spqWj^l@9`_8R_kM8Ps@>B7FjT%of*~M!wRN@WwHK) zwvX>09Qzb1i}34f_L9X zAN@lzjIVHC{CVxq(@+1f(f0cuzke|X^&*(i@p{%(F#vvh*$2lMU~PgX1dOr_N~udN zj+#s+m`+cj09a>NQ`5=h5&rVmzim9FHmAq!g*pYmWY0{k^ZUQqcuL*p_?@-TO5yDB zS-XUDU~6N<>tU=*VO)YV&2Zz!4a|#z%Nj08DTPs%;q2@TWm%x9EBJa?>wjXz(`xT4 zAV!pB0q_0liX~kvO%izT+a;Te1>!>^zYeol&1aQne62`l-6jP24~)TL}0gWGeH}QF$OUNJbwB%lL4OOKChP>*|f3GtWix| zf;4NFa6&1V9l2Gu386j5^B!eU@J6=vTWZ&+8tVqRxOppLY!5+;ndNoRUocNu-Hfjd z6n5-pd_=^+oAHSN@c)M)A(JivE0aJ08IwQ(8IwQ(8IwQ(7JqW7V601^6x$-eUi1KC z9rpIe0Dy8nLph%z#@+Z1NBXJ@zhG-`|0Z0LuKpZjU^qMM!e9=*dHaRmN4*TEn4N8F zZ1gp>_Qb@w1p1usYg9@j9qnypQ1tb6ZZIy(paleFy>OOfU3-!{9*?1*fEY0vWr!idHw}z2sOt*z kVvf*wG`@bRgQlzVe}GVwHO8lAEC2ui07*qoM6N<$g8khe_W%F@ delta 1652 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 F{R5y7)d~Or literal 1494 zcmcIk{Xf$Q9RK2uB^AqQX?HWOG7n`!o<=Qhtc_YE6Jr)HhuOx}d}@AHd_rMRJYw#9*xb~w ziPwkXgoHjz9Ee|&clf9q8qS9%osgULQ(IoKToxL^ zV1w<1rk`ZUWax-!7 zA`}tIWHLb+^ewMhb7l1g1;^TJ^Eg#KI!%|L1#umEMy_7N^C|oi?zP0I^Re9B z6E7_REFvC$3bC-T;4x5J?{O^9x1MSo^~L8L%h)~?_yo#EH&W6=nz3j&QE!K zR@hoQv$kV9qv@bgL*Ijb2!+mrI&b@;pBd`p)Hzl`%O0li$I!(9K{ z)3gFYcbLh&2KyJNT!%!bltigg#Aw4a&vqvD11QP1Qy9I3%)LH+j^hMsY{S}n9T6a5flX-Ws_p$+7D8uypG)N^jr(7mS*{*9um`93hm=}*_AVU%sUs%>UtxlSr>#Bhtwez2rRvKm} z-7w6quBH>Gqp!1%sXeQ2$3xWrD2e7*MX=*o?CaMXwA_{qsrvQkK-}f~eK%?yQpVnm zP6{V>$G+Bz!R~}}#%6+3t+6Ui0zp_w5pO;~7Vq!93XdN9_Ewtl74}2!E4e+~5Z1t) zAvUx&Ixty;;c!1JqKg$RLTaIU#*q~iGE7-U+x#T>U-l&kBC%-IDgpmqgMck((UAeU zhRt~GqaevL{aokz`A>uuf6xR6hkfKt%$0sP~m>CiFbKPEsg^EX$ZqCMb#mX_}&c(QNMZ{LETRCKDKAaFnJ1>LZ0t$Z}JYWf`h0`;fPI?~#p0@ZKYBwQAFRQ4M>SYetr3h_y!N`1r#zLR_8WV<@FC8IRw^&kCIo z;H8<0wMM(s`Es10c1)Eht|&g0xBm+YA>nN;oI{c%JMXvFE`)Tu-M!OE zk_7o&2x|?YS~{u95?bwkM{aI^ZWjGPx7&ra7K6b60C0A8w(+?z7h#5CVyNa4hL4Z< z=f{t&_uk#z;qLBkV|cIE!`0Q*#_)fC{=~`YDF7_`6DBB{tbOVC`&(rIAL~;Xp%S8$ zTCCu%^|p?>@;pak%u1SUPzVW_Btbr#Z4BS`_5;Ah#l_a}d^STo7s3ifgBqF=r4*Fb zm|44aw%+UY0KCr9hr=O&m!a?F<>l7eF|!s*>&1wUwT4g(dx6)b@zObr$77tFo*t~d z_ugYT9HNz`&~Z%tU4*88$qEIe;~2&mWTVl+;?71Rm^fbfq{|A85a6|-j?xrmRUyl= zFUOgUMyR}B`IO5Hosdvq?RFc^IgFm4KUIj{dyJl+QC1aNt=7BvS)u7emU*|y!MT@B z4tuTy&#c8{I)#a2+2n92-fjb$T8pZxkR-|WZ9sVrr4){28_?lF*|brvmWOW=P ziXtS&AU0+(v<2!V10WX?_{?sRx`_x-ObmAs3O7jEBqs={qliE)garPC0^bGIuvZWv zbdjz_f9xfM{cQK2#Lm6F%jYnb|2HLk4?Anf@>vV5HO!my7s6rrkdT0g`98LmXjztU z^HWOe&{`inLw`FPg(#(9jKS0VZwc#o{PpWwGW9pJR><Fg6b=iEAxa00000 LNkvXXu0mjfx}PFc delta 1084 zcmV-C1jGA~3X2MmK~%L#L_t(|ob8*va_Tx5MYko}fPoB|dkV^wDJfIt5%PF>jFc%U z^9YnFDb77%umM|^ty_SJAwbB_+_RneR>h2D$)jcI(;uEO#zCM#{p}YJb`g=$A(5>; zfB1j<1wMl3c?W+3fOGEP@21fRA)e>G5pXC^{kLg4(gdvnt+h?05#$){#Ze2!UEz&eaQ4|PUErekR&-38>>+i{03+Eh+F)&#M ztu@;1HuNUFNm3|<)Mc!eOXPWuD2mW(f49$iK1)+9mrDdefKC(vXpR&*A@!jqNfKzK z(Chc#jUoFu=a9rPoO6h}-Np=GRMXyi&q$I4zSihpTzptYRaXDv0!k??7mGLLvqC2X zSPxUa*68*7UoNxiU907Crw&$Vgwz9gp6BTHdf!%duirb^N1k>phPft&0)zNCVQ4|HrvfQbY z4GJL@xiJV^t+Vn@CKCX_U@$nl{IJ!6&GS#a+y4cHkm_sAtwk7y@8(a_bSq>y9G+cI z7=|z#A*?-wYU`vd3TXBIH}dfCf3S@Q!{HEVnqoSg0syYAu8uxetworjSQx5}gxSjr z{`vLmWZv<3jPZDUG<`H0;qLD4X!^gue`9cY2>{!8!UV;TbuN?1+7Rw&N7Iyvhy#vlxWojTc|5K<9@AxxGXO+WSZ1HjGA&B=6=W$-sbSfLnDtD!_G1*J8z zG(EUlAB{!;URUX}*$lvX>U(>8d$MZ*HP2l4LtOt7w{t3VI>c*S<)S z^?3%?=O&)#AqWEGc@C|0<6^}zC}YSzxiRpRLVt5DD4x&P_ji>-r_-Td?0tkr2swn- z8bKJsIY)WW^jR7qJR}H17-JC6=fLI|HrSlK|AbyqhdzeXgL=N%ny<_FX+r3GNPSHb z)NZ8wL>WK>gaALc@ee_@mnDc0I+HL2LXo@+7RG-d0}psR-oJ(b0000