fix: remote queue not working

This commit is contained in:
Kingkor Roy Tirtho 2024-04-09 22:59:30 +06:00
parent 7385088144
commit 9ca0e8bef2
3 changed files with 38 additions and 35 deletions

View File

@ -53,8 +53,7 @@ class PlayerQueue extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final mediaQuery = MediaQuery.of(context); final mediaQuery = MediaQuery.of(context);
final playlistNotifier = ref.watch(ProxyPlaylistNotifier.notifier);
final playlist = ref.watch(ProxyPlaylistNotifier.provider);
final controller = useAutoScrollController(); final controller = useAutoScrollController();
final searchText = useState(''); final searchText = useState('');
@ -241,7 +240,7 @@ class PlayerQueue extends HookConsumerWidget {
], ],
), ),
onPressed: () { onPressed: () {
playlistNotifier.stop(); onStop();
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
), ),
@ -251,9 +250,7 @@ class PlayerQueue extends HookConsumerWidget {
), ),
const SliverGap(10), const SliverGap(10),
SliverReorderableList( SliverReorderableList(
onReorder: (oldIndex, newIndex) { onReorder: onReorder,
playlistNotifier.moveTrack(oldIndex, newIndex);
},
itemCount: filteredTracks.length, itemCount: filteredTracks.length,
onReorderStart: (index) { onReorderStart: (index) {
HapticFeedback.selectionClick(); HapticFeedback.selectionClick();
@ -277,7 +274,7 @@ class PlayerQueue extends HookConsumerWidget {
if (playlist.activeTrack?.id == track.id) { if (playlist.activeTrack?.id == track.id) {
return; return;
} }
await playlistNotifier.jumpToTrack(track); await onJump(track);
}, },
leadingActions: [ leadingActions: [
if (!isSearching.value && if (!isSearching.value &&

View File

@ -18,6 +18,33 @@ import 'package:spotube/provider/connect/connect.dart';
import 'package:spotube/services/audio_player/loop_mode.dart'; import 'package:spotube/services/audio_player/loop_mode.dart';
import 'package:spotube/utils/service_utils.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 { class ConnectControlPage extends HookConsumerWidget {
const ConnectControlPage({super.key}); const ConnectControlPage({super.key});
@ -50,27 +77,6 @@ class ConnectControlPage extends HookConsumerWidget {
minimumSize: const Size(28, 28), 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) { ref.listen(connectClientsProvider, (prev, next) {
if (next.asData?.value.resolvedService == null) { if (next.asData?.value.resolvedService == null) {
context.pop(); context.pop();
@ -292,7 +298,7 @@ class ConnectControlPage extends HookConsumerWidget {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
builder: (context) { builder: (context) {
return playerQueue; return const RemotePlayerQueue();
}, },
); );
}, },
@ -304,8 +310,8 @@ class ConnectControlPage extends HookConsumerWidget {
), ),
if (constrains.lgAndUp) ...[ if (constrains.lgAndUp) ...[
const VerticalDivider(thickness: 1), const VerticalDivider(thickness: 1),
Expanded( const Expanded(
child: playerQueue, child: RemotePlayerQueue(),
), ),
] ]
], ],

View File

@ -64,10 +64,10 @@ class ConnectClientsNotifier extends AsyncNotifier<ConnectClientsState> {
.where((s) => s.name != event.service!.name) .where((s) => s.name != event.service!.name)
.toList(), .toList(),
discovery: state.value!.discovery, discovery: state.value!.discovery,
resolvedService: resolvedService: state.value?.resolvedService != null &&
event.service?.name == state.value!.resolvedService!.name event.service?.name == state.value?.resolvedService?.name
? null ? null
: state.value!.resolvedService, : state.value!.resolvedService,
), ),
); );
break; break;