@@ -180,12 +180,12 @@ class ReactionChip extends StatelessWidget {
180180      emojiName:  emojiName,
181181    );
182182    final  emoji =  switch  (emojiDisplay) {
183-       UnicodeEmojiDisplay (: final  emojiUnicode ) =>  _UnicodeEmoji (
184-         emojiUnicode :  emojiUnicode , selected:  selfVoted),
185-       ImageEmojiDisplay (: final  resolvedUrl ) =>  _ImageEmoji (
186-         emojiName :  emojiName, resolvedUrl :  resolvedUrl , selected:  selfVoted),
187-       TextEmojiDisplay (: final  emojiName ) =>  _TextEmoji (
188-         emojiName :  emojiName , selected:  selfVoted),
183+       UnicodeEmojiDisplay () =>  _UnicodeEmoji (
184+         emojiDisplay :  emojiDisplay , selected:  selfVoted),
185+       ImageEmojiDisplay () =>  _ImageEmoji (
186+         emojiDisplay :  emojiDisplay, emojiName :  emojiName , selected:  selfVoted),
187+       TextEmojiDisplay () =>  _TextEmoji (
188+         emojiDisplay :  emojiDisplay , selected:  selfVoted),
189189    };
190190
191191    return  Tooltip (
@@ -293,11 +293,11 @@ TextScaler _labelTextScalerClamped(BuildContext context) =>
293293
294294class  _UnicodeEmoji  extends  StatelessWidget  {
295295  const  _UnicodeEmoji ({
296-     required  this .emojiUnicode ,
296+     required  this .emojiDisplay ,
297297    required  this .selected,
298298  });
299299
300-   final  String  emojiUnicode ;
300+   final  UnicodeEmojiDisplay  emojiDisplay ;
301301  final  bool  selected;
302302
303303  @override 
@@ -314,7 +314,7 @@ class _UnicodeEmoji extends StatelessWidget {
314314            fontSize:  _notoColorEmojiTextSize,
315315          ),
316316          strutStyle:  const  StrutStyle (fontSize:  _notoColorEmojiTextSize, forceStrutHeight:  true ),
317-           emojiUnicode);
317+           emojiDisplay. emojiUnicode);
318318      case  TargetPlatform .iOS: 
319319      case  TargetPlatform .macOS: 
320320        // We expect the font "Apple Color Emoji" to be used. There are some 
@@ -340,21 +340,21 @@ class _UnicodeEmoji extends StatelessWidget {
340340            textScaler:  _squareEmojiScalerClamped (context),
341341            style:  const  TextStyle (fontSize:  _squareEmojiSize),
342342            strutStyle:  const  StrutStyle (fontSize:  _squareEmojiSize, forceStrutHeight:  true ),
343-             emojiUnicode)),
343+             emojiDisplay. emojiUnicode)),
344344        ]);
345345    }
346346  }
347347}
348348
349349class  _ImageEmoji  extends  StatelessWidget  {
350350  const  _ImageEmoji ({
351+     required  this .emojiDisplay,
351352    required  this .emojiName,
352-     required  this .resolvedUrl,
353353    required  this .selected,
354354  });
355355
356+   final  ImageEmojiDisplay  emojiDisplay;
356357  final  String  emojiName;
357-   final  Uri  resolvedUrl;
358358  final  bool  selected;
359359
360360  @override 
@@ -371,6 +371,10 @@ class _ImageEmoji extends StatelessWidget {
371371        //   See GitHub comment linked above. 
372372        &&  WidgetsBinding .instance.platformDispatcher.accessibilityFeatures.reduceMotion);
373373
374+     final  resolvedUrl = 
375+       doNotAnimate ?  (emojiDisplay.resolvedStillUrl ??  emojiDisplay.resolvedUrl)
376+         :  emojiDisplay.resolvedUrl;
377+ 
374378    // Unicode and text emoji get scaled; it would look weird if image emoji didn't. 
375379    final  size =  _squareEmojiScalerClamped (context).scale (_squareEmojiSize);
376380
@@ -379,19 +383,26 @@ class _ImageEmoji extends StatelessWidget {
379383      width:  size,
380384      height:  size,
381385      errorBuilder:  (context, _, __) =>  _TextEmoji (
382-         emojiName:  emojiName, selected:  selected),
386+         emojiDisplay :   TextEmojiDisplay ( emojiName:  emojiName) , selected:  selected),
383387    );
384388  }
385389}
386390
387391class  _TextEmoji  extends  StatelessWidget  {
388-   const  _TextEmoji ({required  this .emojiName , required  this .selected});
392+   const  _TextEmoji ({required  this .emojiDisplay , required  this .selected});
389393
390-   final  String  emojiName ;
394+   final  TextEmojiDisplay  emojiDisplay ;
391395  final  bool  selected;
392396
393397  @override 
394398  Widget  build (BuildContext  context) {
399+     final  emojiName =  emojiDisplay.emojiName;
400+ 
401+     // Encourage line breaks before "_" (common in these), but try not 
402+     // to leave a colon alone on a line. See: 
403+     //   <https://github.com/flutter/flutter/issues/61081#issuecomment-1103330522> 
404+     final  text =  ':\u feff${emojiName .replaceAll ('_' , '\u 200b_' )}\u feff:' ;
405+ 
395406    final  reactionTheme =  EmojiReactionTheme .of (context);
396407    return  Text (
397408      textAlign:  TextAlign .end,
@@ -403,9 +414,6 @@ class _TextEmoji extends StatelessWidget {
403414        color:  selected ?  reactionTheme.textSelected :  reactionTheme.textUnselected,
404415      ).merge (weightVariableTextStyle (context,
405416          wght:  selected ?  600  :  null )),
406-       // Encourage line breaks before "_" (common in these), but try not 
407-       // to leave a colon alone on a line. See: 
408-       //   <https://github.com/flutter/flutter/issues/61081#issuecomment-1103330522> 
409-       ':\u feff${emojiName .replaceAll ('_' , '\u 200b_' )}\u feff:' );
417+       text);
410418  }
411419}
0 commit comments