feat: Add Go to Album option in track option #917

This commit is contained in:
Kingkor Roy Tirtho 2023-12-02 22:41:52 +06:00
parent f86d544916
commit b0beeca0cb
3 changed files with 83 additions and 3 deletions

View File

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart';
import 'package:spotube/collections/spotube_icons.dart';
@ -12,6 +13,7 @@ import 'package:spotube/components/shared/dialogs/playlist_add_track_dialog.dart
import 'package:spotube/components/shared/dialogs/track_details_dialog.dart';
import 'package:spotube/components/shared/heart_button.dart';
import 'package:spotube/components/shared/image/universal_image.dart';
import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/local_track.dart';
import 'package:spotube/provider/authentication_provider.dart';
@ -22,6 +24,7 @@ import 'package:spotube/services/mutations/mutations.dart';
import 'package:spotube/utils/type_conversion_utils.dart';
enum TrackOptionValue {
album,
share,
addToPlaylist,
addToQueue,
@ -79,9 +82,12 @@ class TrackOptions extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final scaffoldMessenger = ScaffoldMessenger.of(context);
final mediaQuery = MediaQuery.of(context);
final router = GoRouter.of(context);
final playlist = ref.watch(ProxyPlaylistNotifier.provider);
final playback = ref.watch(ProxyPlaylistNotifier.notifier);
final scaffoldMessenger = ScaffoldMessenger.of(context);
final auth = ref.watch(AuthenticationNotifier.provider);
ref.watch(downloadManagerProvider);
final downloadManager = ref.watch(downloadManagerProvider.notifier);
@ -122,6 +128,12 @@ class TrackOptions extends HookConsumerWidget {
final adaptivePopSheetList = AdaptivePopSheetList<TrackOptionValue>(
onSelected: (value) async {
switch (value) {
case TrackOptionValue.album:
await router.push(
'/album/${track.album!.id}',
extra: track.album!,
);
break;
case TrackOptionValue.delete:
await File((track as LocalTrack).path).delete();
ref.refresh(localTracksProvider);
@ -233,6 +245,13 @@ class TrackOptions extends HookConsumerWidget {
)
],
_ => [
if (mediaQuery.smAndDown)
PopSheetEntry(
value: TrackOptionValue.album,
leading: const Icon(SpotubeIcons.album),
title: Text(context.l10n.go_to_album),
subtitle: Text(track.album!.name!),
),
if (!playlist.containsTrack(track)) ...[
PopSheetEntry(
value: TrackOptionValue.addToQueue,

View File

@ -279,5 +279,6 @@
"password": "Password",
"login": "Login",
"login_with_your_lastfm": "Login with your Last.fm account",
"scrobble_to_lastfm": "Scrobble to Last.fm"
"scrobble_to_lastfm": "Scrobble to Last.fm",
"go_to_album": "Go to Album"
}

View File

@ -1 +1,61 @@
{}
{
"ar": [
"go_to_album"
],
"bn": [
"go_to_album"
],
"ca": [
"go_to_album"
],
"de": [
"go_to_album"
],
"es": [
"go_to_album"
],
"fa": [
"go_to_album"
],
"fr": [
"go_to_album"
],
"hi": [
"go_to_album"
],
"ja": [
"go_to_album"
],
"pl": [
"go_to_album"
],
"pt": [
"go_to_album"
],
"ru": [
"go_to_album"
],
"tr": [
"go_to_album"
],
"uk": [
"go_to_album"
],
"zh": [
"go_to_album"
]
}