feat: add new playback experience and media integration

This commit is contained in:
zarzet committed 2026-06-28 22:22:33 +07:00
1 parent bede5ae8d7
commit 3a2481e8b2
15 files changed
+2636 -7

No files matched your search

File diff suppressed because it is too large. Load diff
@@ -452,6 +452,73 @@ class _LibrarySettingsPageState extends ConsumerState<LibrarySettingsPage> {
),
),
SliverToBoxAdapter(
child: SettingsSectionHeader(title: 'Playback'),
),
SliverToBoxAdapter(
child: SettingsGroup(
children: [
SettingsItem(
icon: Icons.open_in_new,
title: 'External player',
subtitle:
'Open tracks in another music app (recommended for best quality)',
trailing: settings.playerMode == 'external'
? Icon(Icons.check, color: colorScheme.primary)
: null,
onTap: () =>
ref.read(settingsProvider.notifier).setPlayerMode('external'),
),
SettingsItem(
icon: Icons.play_circle_outline,
title: 'Built-in player',
subtitle:
'Play inside SpotiFLAC with a notification and synced lyrics',
trailing: settings.playerMode == 'internal'
? Icon(Icons.check, color: colorScheme.primary)
: null,
onTap: () =>
ref.read(settingsProvider.notifier).setPlayerMode('internal'),
showDivider: false,
),
],
),
),
SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.fromLTRB(16, 8, 16, 0),
child: Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: colorScheme.tertiaryContainer.withValues(alpha: 0.3),
borderRadius: BorderRadius.circular(16),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(
Icons.info_outline,
size: 20,
color: colorScheme.tertiary,
),
const SizedBox(width: 12),
Expanded(
child: Text(
'The built-in player is intentionally simple (local files '
'only, basic playback). For higher quality, gapless audio, '
'equalizer and format support, a dedicated external player '
'is more capable and recommended.',
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: colorScheme.onSurfaceVariant,
),
),
),
],
),
),
),
),
if (settings.localLibraryEnabled) ...[
SliverToBoxAdapter(
child: SettingsSectionHeader(title: context.l10n.libraryActions),