Skip to content

Commit ca46b61

Browse files
committed
wip finish moving doNotAnimate
1 parent cd7b05d commit ca46b61

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

lib/widgets/emoji_reaction.dart

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

294294
class _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

349349
class _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

387391
class _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 = ':\ufeff${emojiName.replaceAll('_', '\u200b_')}\ufeff:';
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-
':\ufeff${emojiName.replaceAll('_', '\u200b_')}\ufeff:');
417+
text);
410418
}
411419
}

0 commit comments

Comments
 (0)