💄 Optimize UX

This commit is contained in:
2024-08-30 23:18:49 +08:00
parent c97a7ae859
commit 4fd9447591
7 changed files with 119 additions and 68 deletions

View File

@ -85,15 +85,6 @@ class _ExploreScreenState extends State<ExploreScreen> {
),
body: CustomScrollView(
slivers: [
if (_newReleasesPlaylist?.isNotEmpty ?? false)
SliverToBoxAdapter(
child: PlaylistSection(
isLoading: _isLoading['newReleases']!,
title: 'New Releases',
list: _newReleasesPlaylist,
),
),
if (_newReleasesPlaylist?.isNotEmpty ?? false) const SliverGap(16),
if (_recentlyPlaylist?.isNotEmpty ?? false)
SliverToBoxAdapter(
child: PlaylistSection(
@ -103,6 +94,15 @@ class _ExploreScreenState extends State<ExploreScreen> {
),
),
if (_recentlyPlaylist?.isNotEmpty ?? false) const SliverGap(16),
if (_newReleasesPlaylist?.isNotEmpty ?? false)
SliverToBoxAdapter(
child: PlaylistSection(
isLoading: _isLoading['newReleases']!,
title: 'New Releases',
list: _newReleasesPlaylist,
),
),
if (_newReleasesPlaylist?.isNotEmpty ?? false) const SliverGap(16),
SliverList.builder(
itemCount: _forYouView?.length ?? 0,
itemBuilder: (context, idx) {

View File

@ -2,8 +2,11 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
import 'package:rhythm_box/platform.dart';
import 'package:rhythm_box/screens/player/queue.dart';
import 'package:rhythm_box/screens/player/siblings.dart';
import 'package:rhythm_box/widgets/lyrics/synced_lyrics.dart';
import 'package:rhythm_box/widgets/player/bottom_player.dart';
import 'package:rhythm_box/widgets/player/devices.dart';
import 'package:window_manager/window_manager.dart';
class MiniPlayerScreen extends StatefulWidget {
@ -94,6 +97,46 @@ class _MiniPlayerScreenState extends State<MiniPlayerScreen> {
onPressed: () => _exitMiniPlayer(),
),
const Spacer(),
IconButton(
icon: const Icon(Icons.speaker, size: 18),
onPressed: () {
showModalBottomSheet(
useRootNavigator: true,
context: context,
builder: (context) => const PlayerDevicePopup(),
);
},
),
IconButton(
icon: const Icon(Icons.merge),
onPressed: () {
showModalBottomSheet(
useRootNavigator: true,
isScrollControlled: true,
context: context,
builder: (context) => const SiblingTracksPopup(),
).then((_) {
if (mounted) {
setState(() {});
}
});
},
),
IconButton(
icon: const Icon(Icons.queue_music),
onPressed: () {
showModalBottomSheet(
useRootNavigator: true,
isScrollControlled: true,
context: context,
builder: (context) => const PlayerQueuePopup(),
).then((_) {
if (mounted) {
setState(() {});
}
});
},
),
IconButton(
icon: _isHoverMode
? const Icon(Icons.touch_app)

View File

@ -139,6 +139,9 @@ class _PlayerScreenState extends State<PlayerScreen> {
if (_playback.state.value.activeTrack != null &&
_auth.auth.value != null)
TrackHeartButton(
key: ValueKey(
_playback.state.value.activeTrack!.id!,
),
trackId: _playback.state.value.activeTrack!.id!,
),
],
@ -178,7 +181,9 @@ class _PlayerScreenState extends State<PlayerScreen> {
},
onChangeEnd: (value) {
audioPlayer.seek(
Duration(milliseconds: value.toInt()));
Duration(milliseconds: value.toInt()),
);
setState(() => _draggingValue = null);
},
),
),