diff --git a/lib/components/player/player_queue.dart b/lib/components/player/player_queue.dart index 29be4830..914d7bc9 100644 --- a/lib/components/player/player_queue.dart +++ b/lib/components/player/player_queue.dart @@ -53,8 +53,7 @@ class PlayerQueue extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { final mediaQuery = MediaQuery.of(context); - final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier); - final playlist = ref.watch(ProxyPlaylistNotifier.provider); + final controller = useAutoScrollController(); final searchText = useState(''); @@ -241,7 +240,7 @@ class PlayerQueue extends HookConsumerWidget { ], ), onPressed: () { - playlistNotifier.stop(); + onStop(); Navigator.of(context).pop(); }, ), @@ -251,9 +250,7 @@ class PlayerQueue extends HookConsumerWidget { ), const SliverGap(10), SliverReorderableList( - onReorder: (oldIndex, newIndex) { - playlistNotifier.moveTrack(oldIndex, newIndex); - }, + onReorder: onReorder, itemCount: filteredTracks.length, onReorderStart: (index) { HapticFeedback.selectionClick(); @@ -277,7 +274,7 @@ class PlayerQueue extends HookConsumerWidget { if (playlist.activeTrack?.id == track.id) { return; } - await playlistNotifier.jumpToTrack(track); + await onJump(track); }, leadingActions: [ if (!isSearching.value && diff --git a/lib/pages/connect/control/control.dart b/lib/pages/connect/control/control.dart index 16256568..b78f0ed3 100644 --- a/lib/pages/connect/control/control.dart +++ b/lib/pages/connect/control/control.dart @@ -18,6 +18,33 @@ import 'package:spotube/provider/connect/connect.dart'; import 'package:spotube/services/audio_player/loop_mode.dart'; import 'package:spotube/utils/service_utils.dart'; +class RemotePlayerQueue extends ConsumerWidget { + const RemotePlayerQueue({super.key}); + + @override + Widget build(BuildContext context, ref) { + final connectNotifier = ref.watch(connectProvider.notifier); + final playlist = ref.watch(queueProvider); + return PlayerQueue( + playlist: playlist, + floating: true, + onJump: (track) async { + final index = playlist.tracks.toList().indexOf(track); + connectNotifier.jumpTo(index); + }, + onRemove: (track) async { + await connectNotifier.removeTrack(track); + }, + onStop: () async => connectNotifier.stop(), + onReorder: (oldIndex, newIndex) async { + await connectNotifier.reorder( + (oldIndex: oldIndex, newIndex: newIndex), + ); + }, + ); + } +} + class ConnectControlPage extends HookConsumerWidget { const ConnectControlPage({super.key}); @@ -50,27 +77,6 @@ class ConnectControlPage extends HookConsumerWidget { minimumSize: const Size(28, 28), ); - final playerQueue = Consumer(builder: (context, ref, _) { - final playlist = ref.watch(queueProvider); - return PlayerQueue( - playlist: playlist, - floating: true, - onJump: (track) async { - final index = playlist.tracks.toList().indexOf(track); - connectNotifier.jumpTo(index); - }, - onRemove: (track) async { - await connectNotifier.removeTrack(track); - }, - onStop: () async => connectNotifier.stop(), - onReorder: (oldIndex, newIndex) async { - await connectNotifier.reorder( - (oldIndex: oldIndex, newIndex: newIndex), - ); - }, - ); - }); - ref.listen(connectClientsProvider, (prev, next) { if (next.asData?.value.resolvedService == null) { context.pop(); @@ -292,7 +298,7 @@ class ConnectControlPage extends HookConsumerWidget { showModalBottomSheet( context: context, builder: (context) { - return playerQueue; + return const RemotePlayerQueue(); }, ); }, @@ -304,8 +310,8 @@ class ConnectControlPage extends HookConsumerWidget { ), if (constrains.lgAndUp) ...[ const VerticalDivider(thickness: 1), - Expanded( - child: playerQueue, + const Expanded( + child: RemotePlayerQueue(), ), ] ], diff --git a/lib/provider/connect/clients.dart b/lib/provider/connect/clients.dart index 282c96aa..d92ff8d3 100644 --- a/lib/provider/connect/clients.dart +++ b/lib/provider/connect/clients.dart @@ -64,10 +64,10 @@ class ConnectClientsNotifier extends AsyncNotifier { .where((s) => s.name != event.service!.name) .toList(), discovery: state.value!.discovery, - resolvedService: - event.service?.name == state.value!.resolvedService!.name - ? null - : state.value!.resolvedService, + resolvedService: state.value?.resolvedService != null && + event.service?.name == state.value?.resolvedService?.name + ? null + : state.value!.resolvedService, ), ); break;