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
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 &&

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/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(),
),
]
],

View File

@ -64,10 +64,10 @@ class ConnectClientsNotifier extends AsyncNotifier<ConnectClientsState> {
.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;