fix(player): queue button not showing when not logged in

This commit is contained in:
Kingkor Roy Tirtho 2023-06-25 10:00:44 +06:00
parent bcfbecc40a
commit 6c2d65587b
3 changed files with 98 additions and 58 deletions

View File

@ -22,10 +22,12 @@ import 'package:spotube/utils/type_conversion_utils.dart';
class PlayerActions extends HookConsumerWidget {
final MainAxisAlignment mainAxisAlignment;
final bool floatingQueue;
final bool showQueue;
final List<Widget>? extraActions;
PlayerActions({
this.mainAxisAlignment = MainAxisAlignment.center,
this.floatingQueue = true,
this.showQueue = true,
this.extraActions,
Key? key,
}) : super(key: key);
@ -72,6 +74,7 @@ class PlayerActions extends HookConsumerWidget {
return Row(
mainAxisAlignment: mainAxisAlignment,
children: [
if (showQueue)
IconButton(
icon: const Icon(SpotubeIcons.queue),
tooltip: context.l10n.queue,

View File

@ -10,6 +10,7 @@ import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart'
import 'package:spotube/components/shared/waypoint.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/logger.dart';
import 'package:spotube/provider/authentication_provider.dart';
import 'package:spotube/services/queries/queries.dart';
import 'package:spotube/utils/type_conversion_utils.dart';
@ -94,6 +95,7 @@ class PersonalizedPage extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final auth = ref.watch(AuthenticationNotifier.provider);
final featuredPlaylistsQuery = useQueries.playlist.featured(ref);
final playlists = useMemoized(
() => featuredPlaylistsQuery.pages
@ -132,6 +134,7 @@ class PersonalizedPage extends HookConsumerWidget {
hasNextPage: featuredPlaylistsQuery.hasNextPage,
onFetchMore: featuredPlaylistsQuery.fetchNext,
),
if (auth != null)
PersonalizedItemCard(
albums: albums,
title: context.l10n.new_releases,

View File

@ -9,6 +9,7 @@ import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/player/player_actions.dart';
import 'package:spotube/components/player/player_controls.dart';
import 'package:spotube/components/player/player_queue.dart';
import 'package:spotube/components/player/volume_slider.dart';
import 'package:spotube/components/shared/animated_gradient.dart';
import 'package:spotube/components/shared/dialogs/track_details_dialog.dart';
@ -77,6 +78,24 @@ class PlayerView extends HookConsumerWidget {
foregroundColor: titleTextColor,
toolbarOpacity: 1,
leading: const BackButton(),
actions: [
IconButton(
icon: const Icon(SpotubeIcons.info, size: 18),
tooltip: context.l10n.details,
style: IconButton.styleFrom(foregroundColor: bodyTextColor),
onPressed: currentTrack == null
? null
: () {
showDialog(
context: context,
builder: (context) {
return TrackDetailsDialog(
track: currentTrack,
);
});
},
)
],
),
extendBodyBehindAppBar: true,
body: SizedBox(
@ -183,38 +202,53 @@ class PlayerView extends HookConsumerWidget {
const SizedBox(height: 25),
PlayerActions(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
floatingQueue: false,
showQueue: false,
),
const SizedBox(height: 10),
if (auth != null)
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
const SizedBox(width: 10),
Expanded(
child: OutlinedButton.icon(
icon: const Icon(SpotubeIcons.info),
label: Text(context.l10n.details),
icon: const Icon(SpotubeIcons.queue),
label: Text(context.l10n.queue),
style: OutlinedButton.styleFrom(
foregroundColor: bodyTextColor,
side: BorderSide(
color: bodyTextColor ?? Colors.white,
),
),
onPressed: currentTrack == null
? null
: () {
showDialog(
onPressed: currentTrack != null
? () {
showModalBottomSheet(
context: context,
isDismissible: true,
enableDrag: true,
isScrollControlled: true,
backgroundColor: Colors.black12,
barrierColor: Colors.black12,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10),
),
constraints: BoxConstraints(
maxHeight:
MediaQuery.of(context)
.size
.height *
.7,
),
builder: (context) {
return TrackDetailsDialog(
track: currentTrack,
);
});
return PlayerQueue(
floating: false);
},
);
}
: null),
),
),
const SizedBox(width: 10),
if (auth != null) const SizedBox(width: 10),
if (auth != null)
Expanded(
child: OutlinedButton.icon(
label: Text(context.l10n.lyrics),