mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-09-29 04:42:02 +02:00
fix(ui): show Dolby Atmos as a compact logo
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/cupertino.dart' show CupertinoIcons;
|
||||
import 'package:spotiflac_android/theme/app_tokens.dart';
|
||||
import 'package:spotiflac_android/theme/mornye_theme.dart';
|
||||
import 'package:spotiflac_android/theme/cover_palette.dart';
|
||||
import 'package:spotiflac_android/screens/track_history_snapshot.dart';
|
||||
import 'package:spotiflac_android/widgets/collection_scaffold.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
@@ -31,6 +32,7 @@ import 'package:spotiflac_android/widgets/playlist_picker_sheet.dart';
|
||||
import 'package:spotiflac_android/utils/clickable_metadata.dart';
|
||||
import 'package:spotiflac_android/widgets/cross_extension_share_sheet.dart';
|
||||
import 'package:spotiflac_android/widgets/track_list_tile.dart';
|
||||
import 'package:spotiflac_android/widgets/audio_quality_badges.dart';
|
||||
import 'package:spotiflac_android/widgets/motion_header_banner.dart';
|
||||
import 'package:spotiflac_android/widgets/track_detail_actions.dart';
|
||||
import 'package:spotiflac_android/widgets/selection_action_button.dart';
|
||||
@@ -276,7 +278,14 @@ class _AlbumScreenState extends ConsumerState<AlbumScreen>
|
||||
|
||||
final items = <Widget>[];
|
||||
if (has(['atmos', 'dolby_atmos', 'dolby-atmos'])) {
|
||||
items.add(HeaderMetaItem('Dolby Atmos', icon: Icons.surround_sound));
|
||||
items.add(
|
||||
Builder(
|
||||
builder: (context) => DolbyAtmosLogo(
|
||||
color: HeaderPalette.of(context).onSurface,
|
||||
size: const Size(18, 12),
|
||||
),
|
||||
),
|
||||
);
|
||||
} else if (has(['spatial'])) {
|
||||
items.add(HeaderMetaItem('Spatial Audio', icon: Icons.surround_sound));
|
||||
}
|
||||
|
||||
@@ -129,34 +129,36 @@ class DolbyAtmosBadge extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 1),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 3),
|
||||
decoration: BoxDecoration(
|
||||
color: colorScheme.tertiaryContainer.withValues(alpha: 0.6),
|
||||
borderRadius: context.tokens.borderRadiusBadge,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
CustomPaint(
|
||||
size: const Size(14, 10),
|
||||
painter: DolbyLogoPainter(color: colorScheme.onTertiaryContainer),
|
||||
),
|
||||
const SizedBox(width: 3),
|
||||
Text(
|
||||
'Atmos',
|
||||
style: TextStyle(
|
||||
fontSize: context.tokens.badgeFontSize,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: colorScheme.onTertiaryContainer,
|
||||
height: 1.3,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: DolbyAtmosLogo(color: colorScheme.onTertiaryContainer),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class DolbyAtmosLogo extends StatelessWidget {
|
||||
const DolbyAtmosLogo({
|
||||
super.key,
|
||||
required this.color,
|
||||
this.size = const Size(14, 10),
|
||||
});
|
||||
|
||||
final Color color;
|
||||
final Size size;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Tooltip(
|
||||
message: 'Dolby Atmos',
|
||||
child: CustomPaint(
|
||||
size: size,
|
||||
painter: DolbyLogoPainter(color: color),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
class DolbyLogoPainter extends CustomPainter {
|
||||
final Color color;
|
||||
|
||||
|
||||
@@ -276,7 +276,8 @@ void main() {
|
||||
expect(albumTrack.totalTracks, 1);
|
||||
expect(albumTrack.audioQuality, '16-bit');
|
||||
expect(find.text('Lossless'), findsOneWidget);
|
||||
expect(find.text('Dolby Atmos'), findsOneWidget);
|
||||
expect(find.text('Dolby Atmos'), findsNothing);
|
||||
expect(find.byTooltip('Dolby Atmos'), findsOneWidget);
|
||||
expect(find.byType(AudioQualityBadge), findsNothing);
|
||||
expect(find.byType(DolbyAtmosBadge), findsNothing);
|
||||
expect(find.byType(ExplicitBadge), findsOneWidget);
|
||||
|
||||
Reference in New Issue
Block a user