diff --git a/lib/widgets/audio_quality_badges.dart b/lib/widgets/audio_quality_badges.dart index 1cee2837..4e721829 100644 --- a/lib/widgets/audio_quality_badges.dart +++ b/lib/widgets/audio_quality_badges.dart @@ -99,11 +99,15 @@ class ExplicitTrackTitle extends StatelessWidget { TextSpan(text: title), if (explicit) WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Padding( - padding: const EdgeInsets.only(left: 6), - child: ExplicitBadge( - colorScheme: colorScheme ?? Theme.of(context).colorScheme, + alignment: PlaceholderAlignment.baseline, + baseline: TextBaseline.alphabetic, + child: Transform.translate( + offset: const Offset(0, -2), + child: Padding( + padding: const EdgeInsets.only(left: 6), + child: ExplicitBadge( + colorScheme: colorScheme ?? Theme.of(context).colorScheme, + ), ), ), ), diff --git a/test/explicit_track_title_alignment_test.dart b/test/explicit_track_title_alignment_test.dart new file mode 100644 index 00000000..a13a867f --- /dev/null +++ b/test/explicit_track_title_alignment_test.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:spotiflac_android/l10n/app_localizations.dart'; +import 'package:spotiflac_android/widgets/audio_quality_badges.dart'; + +void main() { + testWidgets('explicit title badge follows the title alphabetic baseline', ( + tester, + ) async { + await tester.pumpWidget( + MaterialApp( + localizationsDelegates: AppLocalizations.localizationsDelegates, + supportedLocales: AppLocalizations.supportedLocales, + home: const Scaffold( + body: ExplicitTrackTitle( + title: 'Explicit Track', + explicit: true, + style: TextStyle(fontSize: 24, height: 1.2), + ), + ), + ), + ); + + expect(tester.takeException(), isNull); + + final richText = tester.widget( + find + .descendant( + of: find.byType(ExplicitTrackTitle), + matching: find.byWidgetPredicate( + (widget) => widget is Text && widget.textSpan != null, + ), + ) + .first, + ); + final rootSpan = richText.textSpan! as TextSpan; + final badgeSpan = rootSpan.children!.whereType().single; + final transform = badgeSpan.child as Transform; + + expect(badgeSpan.alignment, PlaceholderAlignment.baseline); + expect(badgeSpan.baseline, TextBaseline.alphabetic); + expect(transform.transform.getTranslation().y, -2); + expect(find.byType(ExplicitBadge), findsOneWidget); + }); +}