From 9f47f2ce85a24e1324ace8ed92c8f2c59e926dd2 Mon Sep 17 00:00:00 2001 From: zarzet Date: Sun, 11 Jan 2026 04:28:41 +0700 Subject: [PATCH] UI Modernization: Unified app bars, updated logos, improved settings & Deezer support --- CHANGELOG.md | 51 +++ assets/images/logo-transparant.png | Bin 0 -> 70908 bytes lib/screens/home_tab.dart | 68 ++-- lib/screens/queue_tab.dart | 33 +- lib/screens/settings/about_page.dart | 35 +- .../settings/appearance_settings_page.dart | 325 ++++++++++++++---- lib/screens/settings/settings_tab.dart | 33 +- lib/screens/track_metadata_screen.dart | 60 ++-- lib/theme/app_theme.dart | 6 + 9 files changed, 458 insertions(+), 153 deletions(-) create mode 100644 assets/images/logo-transparant.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 9143d6d7..a8cb395c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,56 @@ # Changelog +## [2.2.7] - 2026-01-11 + +### Added + +- **Deezer Metadata Support**: Enhanced metadata viewer for Deezer tracks + - "Open in Deezer" button for Deezer-sourced tracks (opens app or web) + - Displays "Deezer ID" instead of "Spotify ID" when applicable + +### Changed + +- **UI Modernization**: Major UI consistency updates across the app + - **Unified App Bars**: Home, History, and Settings now share identical behavior + - Lowered expanded header for easier one-handed reachability + - Dynamic title text scaling (20px to 34px) + - **Appearance Settings**: Completely redesigned appearance page + - New "Theme Preview" card showing visualizing current theme + - Modern color palette picker replacing old color dots + - Clean, grouped layout + - **App Logo**: Refined logo style on Home and About screens + - Inverted colors: Filled primary color circle with on-color icon + - Removed padding for a cleaner, bolder look + - **Material 3 Switches**: Added checkmark icon to active switches + +## [2.2.6] - 2026-01-11 + +### Fixed + +- **Release Mode Logging**: Flutter app logs now properly captured in release builds + - Previously only Go backend logs appeared when "Detailed Logging" was enabled + - Now both Flutter and Go logs are captured in release mode + - Bypasses Logger package which filters logs in release mode + +### Added + +- **Detailed Deezer Search Logging**: Better debugging for search issues + - Logs API URLs, response counts, and errors + - Helps diagnose geo-restriction and API issues + - Detects Deezer API error responses + +### Changed + +- **Home Screen Logo**: Replaced music note icon with app logo + - Uses `assets/images/logo.png` + - Rounded corners (24px radius) + - Fallback to music note icon if logo fails to load +- **About Page Logo**: Removed shadow/border from logo + - Cleaner appearance without background container +- **About Page Icon Alignment**: Icons now aligned with contributor avatars + - DoubleDouble and DAB Music icons use 40x40 area + - Text now properly aligned with contributor items + ## [2.2.5] - 2026-01-10 ### Added diff --git a/assets/images/logo-transparant.png b/assets/images/logo-transparant.png new file mode 100644 index 0000000000000000000000000000000000000000..afe8ad9403c67d46e9c51f2cc8fa7bcfe09789c4 GIT binary patch literal 70908 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 (> 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%0Ap#02Ou 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 literal 0 HcmV?d00001 diff --git a/lib/screens/home_tab.dart b/lib/screens/home_tab.dart index c8e353d3..bf96e6f2 100644 --- a/lib/screens/home_tab.dart +++ b/lib/screens/home_tab.dart @@ -289,6 +289,7 @@ class _HomeTabState extends ConsumerState with AutomaticKeepAliveClient final colorScheme = Theme.of(context).colorScheme; final hasResults = _isTyping || tracks.isNotEmpty || (searchArtists != null && searchArtists.isNotEmpty) || isLoading; final screenHeight = MediaQuery.of(context).size.height; + final topPadding = MediaQuery.of(context).padding.top; final historyItems = ref.watch(downloadHistoryProvider.select((s) => s.items)); return Scaffold( @@ -297,24 +298,32 @@ class _HomeTabState extends ConsumerState with AutomaticKeepAliveClient slivers: [ // App Bar - always present SliverAppBar( - expandedHeight: 130, + expandedHeight: 120 + topPadding, collapsedHeight: kToolbarHeight, floating: false, pinned: true, backgroundColor: colorScheme.surface, surfaceTintColor: Colors.transparent, automaticallyImplyLeading: false, - flexibleSpace: FlexibleSpaceBar( - expandedTitleScale: 1.3, - titlePadding: const EdgeInsets.only(left: 24, bottom: 16), - title: Text( - 'Home', - style: TextStyle( - fontSize: 28, - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - ), - ), + flexibleSpace: LayoutBuilder( + builder: (context, constraints) { + final maxHeight = 120 + topPadding; + final minHeight = kToolbarHeight + topPadding; + final expandRatio = ((constraints.maxHeight - minHeight) / (maxHeight - minHeight)).clamp(0.0, 1.0); + + return FlexibleSpaceBar( + expandedTitleScale: 1.0, + titlePadding: const EdgeInsets.only(left: 24, bottom: 16), + title: Text( + 'Home', + style: TextStyle( + fontSize: 20 + (14 * expandRatio), // 20 -> 34 + fontWeight: FontWeight.bold, + color: colorScheme.onSurface, + ), + ), + ); + }, ), ), @@ -328,24 +337,25 @@ class _HomeTabState extends ConsumerState with AutomaticKeepAliveClient : Column( children: [ SizedBox(height: screenHeight * 0.06), - ClipRRect( - borderRadius: BorderRadius.circular(24), + Container( + width: 96, + height: 96, + decoration: BoxDecoration( + color: colorScheme.primary, + shape: BoxShape.circle, + ), child: Image.asset( - 'assets/images/logo.png', - width: 96, - height: 96, - fit: BoxFit.cover, - errorBuilder: (_, _, _) => Container( - width: 96, - height: 96, - decoration: BoxDecoration( - color: colorScheme.primaryContainer, - borderRadius: BorderRadius.circular(24), - ), - child: Icon( - Icons.music_note, - size: 48, - color: colorScheme.onPrimaryContainer, + 'assets/images/logo-transparant.png', + color: colorScheme.onPrimary, // Tint with onPrimary color + fit: BoxFit.contain, + errorBuilder: (_, _, _) => ClipRRect( + // Fallback to original logo if transparent one is missing + borderRadius: BorderRadius.circular(24), + child: Image.asset( + 'assets/images/logo.png', + width: 96, + height: 96, + fit: BoxFit.cover, ), ), ), diff --git a/lib/screens/queue_tab.dart b/lib/screens/queue_tab.dart index 082e3085..cbd10da6 100644 --- a/lib/screens/queue_tab.dart +++ b/lib/screens/queue_tab.dart @@ -99,29 +99,38 @@ class _QueueTabState extends ConsumerState { final historyItems = ref.watch(downloadHistoryProvider.select((s) => s.items)); final historyViewMode = ref.watch(settingsProvider.select((s) => s.historyViewMode)); final colorScheme = Theme.of(context).colorScheme; + final topPadding = MediaQuery.of(context).padding.top; return CustomScrollView( slivers: [ // Collapsing App Bar - Simplified for performance SliverAppBar( - expandedHeight: 130, + expandedHeight: 120 + topPadding, collapsedHeight: kToolbarHeight, floating: false, pinned: true, backgroundColor: colorScheme.surface, surfaceTintColor: Colors.transparent, automaticallyImplyLeading: false, - flexibleSpace: FlexibleSpaceBar( - expandedTitleScale: 1.3, - titlePadding: const EdgeInsets.only(left: 24, bottom: 16), - title: Text( - 'History', - style: TextStyle( - fontSize: 28, - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - ), - ), + flexibleSpace: LayoutBuilder( + builder: (context, constraints) { + final maxHeight = 120 + topPadding; + final minHeight = kToolbarHeight + topPadding; + final expandRatio = ((constraints.maxHeight - minHeight) / (maxHeight - minHeight)).clamp(0.0, 1.0); + + return FlexibleSpaceBar( + expandedTitleScale: 1.0, + titlePadding: const EdgeInsets.only(left: 24, bottom: 16), + title: Text( + 'History', + style: TextStyle( + fontSize: 20 + (14 * expandRatio), // 20 -> 34 + fontWeight: FontWeight.bold, + color: colorScheme.onSurface, + ), + ), + ); + }, ), ), diff --git a/lib/screens/settings/about_page.dart b/lib/screens/settings/about_page.dart index 36f055ac..c29298f5 100644 --- a/lib/screens/settings/about_page.dart +++ b/lib/screens/settings/about_page.dart @@ -250,24 +250,25 @@ class _AppHeaderCard extends StatelessWidget { child: Column( children: [ // App logo - ClipRRect( - borderRadius: BorderRadius.circular(24), + // App logo + Container( + width: 88, + height: 88, + decoration: BoxDecoration( + color: colorScheme.primary, + shape: BoxShape.circle, + ), child: Image.asset( - 'assets/images/logo.png', - width: 88, - height: 88, - fit: BoxFit.cover, - errorBuilder: (_, _, _) => Container( - width: 88, - height: 88, - decoration: BoxDecoration( - color: colorScheme.primaryContainer, - borderRadius: BorderRadius.circular(24), - ), - child: Icon( - Icons.music_note, - size: 48, - color: colorScheme.onPrimaryContainer, + 'assets/images/logo-transparant.png', + color: colorScheme.onPrimary, // Tint with onPrimary color + fit: BoxFit.contain, + errorBuilder: (_, _, _) => ClipRRect( + borderRadius: BorderRadius.circular(24), + child: Image.asset( + 'assets/images/logo.png', + width: 88, + height: 88, + fit: BoxFit.cover, ), ), ), diff --git a/lib/screens/settings/appearance_settings_page.dart b/lib/screens/settings/appearance_settings_page.dart index 107be1b2..18daa3de 100644 --- a/lib/screens/settings/appearance_settings_page.dart +++ b/lib/screens/settings/appearance_settings_page.dart @@ -31,6 +31,42 @@ class AppearanceSettingsPage extends ConsumerWidget { flexibleSpace: _AppBarTitle(title: 'Appearance', topPadding: topPadding), ), + // Preview Section + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: _ThemePreviewCard(), + ), + ), + + // Color section + const SliverToBoxAdapter(child: SettingsSectionHeader(title: 'Color')), + + SliverToBoxAdapter( + child: SettingsGroup( + children: [ + SettingsSwitchItem( + icon: Icons.wallpaper, + title: 'Dynamic Color', + subtitle: 'Use colors from your wallpaper', + value: themeSettings.useDynamicColor, + onChanged: (value) => ref.read(themeProvider.notifier).setUseDynamicColor(value), + showDivider: false, + ), + ], + ), + ), + if (!themeSettings.useDynamicColor) + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 12, 16, 0), + child: _ColorPalettePicker( + currentColor: themeSettings.seedColorValue, + onColorSelected: (color) => ref.read(themeProvider.notifier).setSeedColor(color), + ), + ), + ), + // Theme section const SliverToBoxAdapter(child: SettingsSectionHeader(title: 'Theme')), SliverToBoxAdapter( @@ -43,7 +79,7 @@ class AppearanceSettingsPage extends ConsumerWidget { SettingsSwitchItem( icon: Icons.brightness_2, title: 'AMOLED Dark', - subtitle: 'Pure black background for OLED screens', + subtitle: 'Pure black background', value: themeSettings.useAmoled, onChanged: (value) => ref.read(themeProvider.notifier).setUseAmoled(value), showDivider: false, @@ -52,28 +88,6 @@ class AppearanceSettingsPage extends ConsumerWidget { ), ), - // Color section - const SliverToBoxAdapter(child: SettingsSectionHeader(title: 'Color')), - SliverToBoxAdapter( - child: SettingsGroup( - children: [ - SettingsSwitchItem( - icon: Icons.auto_awesome, - title: 'Dynamic Color', - subtitle: 'Use colors from your wallpaper', - value: themeSettings.useDynamicColor, - onChanged: (value) => ref.read(themeProvider.notifier).setUseDynamicColor(value), - showDivider: !themeSettings.useDynamicColor, - ), - if (!themeSettings.useDynamicColor) - _ColorPicker( - currentColor: themeSettings.seedColorValue, - onColorSelected: (color) => ref.read(themeProvider.notifier).setSeedColor(color), - ), - ], - ), - ), - // Layout section const SliverToBoxAdapter(child: SettingsSectionHeader(title: 'Layout')), SliverToBoxAdapter( @@ -88,7 +102,7 @@ class AppearanceSettingsPage extends ConsumerWidget { ), // Fill remaining for scroll - const SliverFillRemaining(hasScrollBody: false, child: SizedBox()), + const SliverFillRemaining(hasScrollBody: false, child: SizedBox(height: 32)), ], ), ), @@ -96,6 +110,230 @@ class AppearanceSettingsPage extends ConsumerWidget { } } +/// A simplified preview of how the app looks with current settings +class _ThemePreviewCard extends StatelessWidget { + @override + Widget build(BuildContext context) { + final colorScheme = Theme.of(context).colorScheme; + final isDark = Theme.of(context).brightness == Brightness.dark; + + return Container( + height: 200, + width: double.infinity, + decoration: BoxDecoration( + color: colorScheme.surfaceContainerHighest, // Background similar to reference + borderRadius: BorderRadius.circular(28), + ), + clipBehavior: Clip.antiAlias, + child: Stack( + children: [ + // Decorative background blobs + Positioned( + top: -50, + right: -50, + child: Container( + width: 200, height: 200, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorScheme.primaryContainer.withValues(alpha: 0.5), + ), + ), + ), + Positioned( + bottom: -30, + left: -30, + child: Container( + width: 150, height: 150, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: colorScheme.tertiaryContainer.withValues(alpha: 0.5), + ), + ), + ), + + // Foreground "fake UI" + Center( + child: Container( + width: 260, + height: 140, + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + color: colorScheme.surface, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.1), + blurRadius: 20, + offset: const Offset(0, 10), + ), + ], + ), + child: Row( + children: [ + // Fake Album Art + Container( + width: 108, + height: 108, + decoration: BoxDecoration( + color: colorScheme.primary, + borderRadius: BorderRadius.circular(16), + ), + child: Icon(Icons.music_note, color: colorScheme.onPrimary, size: 48), + ), + const SizedBox(width: 16), + + // Fake Text Info + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: double.infinity, height: 14, + decoration: BoxDecoration( + color: colorScheme.onSurface, + borderRadius: BorderRadius.circular(4), + ), + ), + const SizedBox(height: 8), + Container( + width: 80, height: 10, + decoration: BoxDecoration( + color: colorScheme.primary, + borderRadius: BorderRadius.circular(4), + ), + ), + const SizedBox(height: 24), + Row( + children: [ + Icon(Icons.skip_previous, size: 24, color: colorScheme.onSurfaceVariant), + const SizedBox(width: 12), + Icon(Icons.play_circle_fill, size: 32, color: colorScheme.primary), + const SizedBox(width: 12), + Icon(Icons.skip_next, size: 24, color: colorScheme.onSurfaceVariant), + ], + ), + ], + ), + ), + ], + ), + ), + ), + + // Label badge + Positioned( + bottom: 12, + right: 12, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4), + decoration: BoxDecoration( + color: Colors.black.withValues(alpha: 0.6), + borderRadius: BorderRadius.circular(20), + ), + child: Text( + isDark ? 'Dark Mode' : 'Light Mode', + style: const TextStyle(color: Colors.white, fontSize: 10, fontWeight: FontWeight.bold), + ), + ), + ) + ], + ), + ); + } +} + + + +class _ColorPalettePicker extends StatelessWidget { + final int currentColor; + final ValueChanged onColorSelected; + const _ColorPalettePicker({required this.currentColor, required this.onColorSelected}); + + static const _colors = [ + Color(0xFF1DB954), Color(0xFF6750A4), Color(0xFF0061A4), Color(0xFF006E1C), + Color(0xFFBA1A1A), Color(0xFF984061), Color(0xFF7D5260), Color(0xFF006874), + ]; + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + children: _colors.map((color) { + final isSelected = color.toARGB32() == currentColor; + return Padding( + padding: const EdgeInsets.only(right: 12), + child: GestureDetector( + onTap: () => onColorSelected(color), + child: _ColorPaletteItem(color: color, isSelected: isSelected), + ), + ); + }).toList(), + ), + ); + } +} + +class _ColorPaletteItem extends StatelessWidget { + final Color color; + final bool isSelected; + + const _ColorPaletteItem({required this.color, required this.isSelected}); + + @override + Widget build(BuildContext context) { + final scheme = ColorScheme.fromSeed(seedColor: color, brightness: Theme.of(context).brightness); + final size = 64.0; + + return Stack( + children: [ + Container( + width: size, + height: size, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + ), + clipBehavior: Clip.antiAlias, + child: Column( + children: [ + Expanded( + child: Row( + children: [ + Expanded(child: Container(color: scheme.primaryContainer)), + Expanded(child: Container(color: scheme.tertiaryContainer)), + ], + ), + ), + Expanded( + child: Row( + children: [ + Expanded(child: Container(color: scheme.secondaryContainer)), + Expanded(child: Container(color: scheme.surfaceContainer)), + ], + ), + ), + ], + ), + ), + if (isSelected) + Positioned.fill( + child: Center( + child: Container( + padding: const EdgeInsets.all(4), + decoration: const BoxDecoration( + color: Colors.white, + shape: BoxShape.circle, + ), + child: Icon(Icons.check, size: 16, color: scheme.primary), + ), + ), + ), + ], + ); + } +} + /// Optimized app bar title with animation class _AppBarTitle extends StatelessWidget { final String title; @@ -200,45 +438,6 @@ class _ThemeModeChip extends StatelessWidget { } } -class _ColorPicker extends StatelessWidget { - final int currentColor; - final ValueChanged onColorSelected; - const _ColorPicker({required this.currentColor, required this.onColorSelected}); - - static const _colors = [ - Color(0xFF1DB954), Color(0xFF6750A4), Color(0xFF0061A4), Color(0xFF006E1C), - Color(0xFFBA1A1A), Color(0xFF984061), Color(0xFF7D5260), Color(0xFF006874), Color(0xFFFF6F00), - ]; - - @override - Widget build(BuildContext context) { - final colorScheme = Theme.of(context).colorScheme; - return Padding( - padding: const EdgeInsets.fromLTRB(20, 8, 20, 16), - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text('Accent Color', style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: colorScheme.onSurfaceVariant)), - const SizedBox(height: 12), - Wrap(spacing: 12, runSpacing: 12, children: _colors.map((color) { - final isSelected = color.toARGB32() == currentColor; - return GestureDetector( - onTap: () => onColorSelected(color), - child: AnimatedContainer( - duration: const Duration(milliseconds: 200), - width: 44, height: 44, - decoration: BoxDecoration( - color: color, shape: BoxShape.circle, - border: isSelected ? Border.all(color: colorScheme.onSurface, width: 3) : null, - boxShadow: isSelected ? [BoxShadow(color: color.withValues(alpha: 0.4), blurRadius: 8, spreadRadius: 2)] : null, - ), - child: isSelected ? const Icon(Icons.check, color: Colors.white, size: 20) : null, - ), - ); - }).toList()), - ]), - ); - } -} - class _HistoryViewSelector extends StatelessWidget { final String currentMode; final ValueChanged onChanged; diff --git a/lib/screens/settings/settings_tab.dart b/lib/screens/settings/settings_tab.dart index 8d63dd82..9c30f67d 100644 --- a/lib/screens/settings/settings_tab.dart +++ b/lib/screens/settings/settings_tab.dart @@ -14,29 +14,38 @@ class SettingsTab extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final colorScheme = Theme.of(context).colorScheme; + final topPadding = MediaQuery.of(context).padding.top; return CustomScrollView( slivers: [ // Collapsing App Bar SliverAppBar( - expandedHeight: 130, + expandedHeight: 120 + topPadding, collapsedHeight: kToolbarHeight, floating: false, pinned: true, backgroundColor: colorScheme.surface, surfaceTintColor: Colors.transparent, automaticallyImplyLeading: false, - flexibleSpace: FlexibleSpaceBar( - expandedTitleScale: 1.3, - titlePadding: const EdgeInsets.only(left: 24, bottom: 16), - title: Text( - 'Settings', - style: TextStyle( - fontSize: 28, - fontWeight: FontWeight.bold, - color: colorScheme.onSurface, - ), - ), + flexibleSpace: LayoutBuilder( + builder: (context, constraints) { + final maxHeight = 120 + topPadding; + final minHeight = kToolbarHeight + topPadding; + final expandRatio = ((constraints.maxHeight - minHeight) / (maxHeight - minHeight)).clamp(0.0, 1.0); + + return FlexibleSpaceBar( + expandedTitleScale: 1.0, + titlePadding: const EdgeInsets.only(left: 24, bottom: 16), + title: Text( + 'Settings', + style: TextStyle( + fontSize: 20 + (14 * expandRatio), // 20 -> 34 + fontWeight: FontWeight.bold, + color: colorScheme.onSurface, + ), + ), + ); + }, ), ), diff --git a/lib/screens/track_metadata_screen.dart b/lib/screens/track_metadata_screen.dart index 90480f0a..3c2294c6 100644 --- a/lib/screens/track_metadata_screen.dart +++ b/lib/screens/track_metadata_screen.dart @@ -353,19 +353,24 @@ class _TrackMetadataScreenState extends ConsumerState { // Metadata grid _buildMetadataGrid(context, colorScheme), - // Spotify link button + // Streaming service link button if (item.spotifyId != null && item.spotifyId!.isNotEmpty) ...[ const SizedBox(height: 8), - OutlinedButton.icon( - onPressed: () => _openSpotifyUrl(context), - icon: const Icon(Icons.open_in_new, size: 18), - label: const Text('Open in Spotify'), - style: OutlinedButton.styleFrom( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - ), + Builder( + builder: (context) { + final isDeezer = item.spotifyId!.contains('deezer'); + return OutlinedButton.icon( + onPressed: () => _openServiceUrl(context), + icon: const Icon(Icons.open_in_new, size: 18), + label: Text(isDeezer ? 'Open in Deezer' : 'Open in Spotify'), + style: OutlinedButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ), + ); + } ), ], ], @@ -374,16 +379,24 @@ class _TrackMetadataScreenState extends ConsumerState { ); } - Future _openSpotifyUrl(BuildContext context) async { + Future _openServiceUrl(BuildContext context) async { if (item.spotifyId == null) return; - final webUrl = 'https://open.spotify.com/track/${item.spotifyId}'; - final spotifyUri = Uri.parse('spotify:track:${item.spotifyId}'); + final isDeezer = item.spotifyId!.contains('deezer'); + final rawId = item.spotifyId!.replaceAll('deezer:', ''); + + final webUrl = isDeezer + ? 'https://www.deezer.com/track/$rawId' + : 'https://open.spotify.com/track/$rawId'; + + final appUri = isDeezer + ? Uri.parse('deezer://www.deezer.com/track/$rawId') + : Uri.parse('spotify:track:$rawId'); try { - // Try to open in Spotify app first using URI scheme + // Try to open in App first using URI scheme final launched = await launchUrl( - spotifyUri, + appUri, mode: LaunchMode.externalApplication, ); @@ -406,7 +419,7 @@ class _TrackMetadataScreenState extends ConsumerState { if (context.mounted) { _copyToClipboard(context, webUrl); ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Spotify URL copied to clipboard')), + SnackBar(content: Text('${isDeezer ? 'Deezer' : 'Spotify'} URL copied to clipboard')), ); } } @@ -439,11 +452,18 @@ class _TrackMetadataScreenState extends ConsumerState { _MetadataItem('Release date', releaseDate!), if (isrc != null && isrc!.isNotEmpty) _MetadataItem('ISRC', isrc!), - if (item.spotifyId != null && item.spotifyId!.isNotEmpty) - _MetadataItem('Spotify ID', item.spotifyId!), + ]; + + if (item.spotifyId != null && item.spotifyId!.isNotEmpty) { + final isDeezer = item.spotifyId!.contains('deezer'); + final cleanId = item.spotifyId!.replaceAll('deezer:', ''); + items.add(_MetadataItem(isDeezer ? 'Deezer ID' : 'Spotify ID', cleanId)); + } + + items.addAll([ _MetadataItem('Service', item.service.toUpperCase()), _MetadataItem('Downloaded', _formatFullDate(item.downloadedAt)), - ]; + ]); return Column( children: items.map((metadata) { diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart index 9d08b720..f9dc3014 100644 --- a/lib/theme/app_theme.dart +++ b/lib/theme/app_theme.dart @@ -221,6 +221,12 @@ class AppTheme { } return scheme.surfaceContainerHighest; }), + thumbIcon: WidgetStateProperty.resolveWith((states) { + if (states.contains(WidgetState.selected)) { + return Icon(Icons.check, color: scheme.primary); + } + return null; + }), ); /// Chip theme