From bb71fc0eeab8e627817e1e556e4344f400816a39 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Tue, 4 Mar 2025 18:26:59 +0600 Subject: [PATCH] chore: use pages instead of drawer for queue, lyrics, sources in mobile --- lib/collections/routes.dart | 12 + lib/collections/routes.gr.dart | 523 ++++++++++--------- lib/components/button/back_button.dart | 6 +- lib/modules/player/player.dart | 55 +- lib/modules/player/player_actions.dart | 27 +- lib/modules/player/sibling_tracks_sheet.dart | 8 +- lib/pages/lyrics/lyrics.dart | 83 +-- lib/pages/player/lyrics.dart | 64 +++ lib/pages/player/queue.dart | 36 ++ lib/pages/player/sources.dart | 15 + 10 files changed, 428 insertions(+), 401 deletions(-) create mode 100644 lib/pages/player/lyrics.dart create mode 100644 lib/pages/player/queue.dart create mode 100644 lib/pages/player/sources.dart diff --git a/lib/collections/routes.dart b/lib/collections/routes.dart index d2c19c52..92c343ca 100644 --- a/lib/collections/routes.dart +++ b/lib/collections/routes.dart @@ -190,6 +190,18 @@ class AppRouter extends RootStackRouter { ), ], ), + AutoRoute( + path: "/player/queue", + page: PlayerQueueRoute.page, + ), + AutoRoute( + path: "/player/sources", + page: PlayerTrackSourcesRoute.page, + ), + AutoRoute( + path: "/player/lyrics", + page: PlayerLyricsRoute.page, + ), AutoRoute( path: "/mini-player", page: MiniLyricsRoute.page, diff --git a/lib/collections/routes.gr.dart b/lib/collections/routes.gr.dart index 4572a23d..1d608896 100644 --- a/lib/collections/routes.gr.dart +++ b/lib/collections/routes.gr.dart @@ -8,12 +8,11 @@ // coverage:ignore-file // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:auto_route/auto_route.dart' as _i40; -import 'package:flutter/material.dart' as _i43; -import 'package:flutter/widgets.dart' as _i44; -import 'package:shadcn_flutter/shadcn_flutter.dart' as _i41; -import 'package:spotify/spotify.dart' as _i42; -import 'package:spotube/models/spotify/recommendation_seeds.dart' as _i45; +import 'package:auto_route/auto_route.dart' as _i43; +import 'package:flutter/material.dart' as _i44; +import 'package:shadcn_flutter/shadcn_flutter.dart' as _i46; +import 'package:spotify/spotify.dart' as _i45; +import 'package:spotube/models/spotify/recommendation_seeds.dart' as _i47; import 'package:spotube/pages/album/album.dart' as _i2; import 'package:spotube/pages/artist/artist.dart' as _i3; import 'package:spotube/pages/connect/connect.dart' as _i6; @@ -26,42 +25,45 @@ import 'package:spotube/pages/home/home.dart' as _i11; import 'package:spotube/pages/lastfm_login/lastfm_login.dart' as _i12; import 'package:spotube/pages/library/library.dart' as _i13; import 'package:spotube/pages/library/playlist_generate/playlist_generate.dart' - as _i20; + as _i23; import 'package:spotube/pages/library/playlist_generate/playlist_generate_result.dart' - as _i19; -import 'package:spotube/pages/library/user_albums.dart' as _i34; -import 'package:spotube/pages/library/user_artists.dart' as _i35; -import 'package:spotube/pages/library/user_downloads.dart' as _i36; + as _i22; +import 'package:spotube/pages/library/user_albums.dart' as _i37; +import 'package:spotube/pages/library/user_artists.dart' as _i38; +import 'package:spotube/pages/library/user_downloads.dart' as _i39; import 'package:spotube/pages/library/user_local_tracks/local_folder.dart' as _i15; import 'package:spotube/pages/library/user_local_tracks/user_local_tracks.dart' - as _i37; -import 'package:spotube/pages/library/user_playlists.dart' as _i38; + as _i40; +import 'package:spotube/pages/library/user_playlists.dart' as _i41; import 'package:spotube/pages/lyrics/lyrics.dart' as _i17; import 'package:spotube/pages/lyrics/mini_lyrics.dart' as _i18; -import 'package:spotube/pages/mobile_login/mobile_login.dart' as _i39; +import 'package:spotube/pages/mobile_login/mobile_login.dart' as _i42; +import 'package:spotube/pages/player/lyrics.dart' as _i19; +import 'package:spotube/pages/player/queue.dart' as _i20; +import 'package:spotube/pages/player/sources.dart' as _i21; import 'package:spotube/pages/playlist/liked_playlist.dart' as _i14; -import 'package:spotube/pages/playlist/playlist.dart' as _i21; -import 'package:spotube/pages/profile/profile.dart' as _i22; -import 'package:spotube/pages/root/root_app.dart' as _i23; -import 'package:spotube/pages/search/search.dart' as _i24; +import 'package:spotube/pages/playlist/playlist.dart' as _i24; +import 'package:spotube/pages/profile/profile.dart' as _i25; +import 'package:spotube/pages/root/root_app.dart' as _i26; +import 'package:spotube/pages/search/search.dart' as _i27; import 'package:spotube/pages/settings/about.dart' as _i1; import 'package:spotube/pages/settings/blacklist.dart' as _i4; import 'package:spotube/pages/settings/logs.dart' as _i16; -import 'package:spotube/pages/settings/settings.dart' as _i25; -import 'package:spotube/pages/stats/albums/albums.dart' as _i26; -import 'package:spotube/pages/stats/artists/artists.dart' as _i27; -import 'package:spotube/pages/stats/fees/fees.dart' as _i31; -import 'package:spotube/pages/stats/minutes/minutes.dart' as _i28; -import 'package:spotube/pages/stats/playlists/playlists.dart' as _i30; -import 'package:spotube/pages/stats/stats.dart' as _i29; -import 'package:spotube/pages/stats/streams/streams.dart' as _i32; -import 'package:spotube/pages/track/track.dart' as _i33; +import 'package:spotube/pages/settings/settings.dart' as _i28; +import 'package:spotube/pages/stats/albums/albums.dart' as _i29; +import 'package:spotube/pages/stats/artists/artists.dart' as _i30; +import 'package:spotube/pages/stats/fees/fees.dart' as _i34; +import 'package:spotube/pages/stats/minutes/minutes.dart' as _i31; +import 'package:spotube/pages/stats/playlists/playlists.dart' as _i33; +import 'package:spotube/pages/stats/stats.dart' as _i32; +import 'package:spotube/pages/stats/streams/streams.dart' as _i35; +import 'package:spotube/pages/track/track.dart' as _i36; /// generated route for /// [_i1.AboutSpotubePage] -class AboutSpotubeRoute extends _i40.PageRouteInfo { - const AboutSpotubeRoute({List<_i40.PageRouteInfo>? children}) +class AboutSpotubeRoute extends _i43.PageRouteInfo { + const AboutSpotubeRoute({List<_i43.PageRouteInfo>? children}) : super( AboutSpotubeRoute.name, initialChildren: children, @@ -69,7 +71,7 @@ class AboutSpotubeRoute extends _i40.PageRouteInfo { static const String name = 'AboutSpotubeRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i1.AboutSpotubePage(); @@ -79,12 +81,12 @@ class AboutSpotubeRoute extends _i40.PageRouteInfo { /// generated route for /// [_i2.AlbumPage] -class AlbumRoute extends _i40.PageRouteInfo { +class AlbumRoute extends _i43.PageRouteInfo { AlbumRoute({ - _i41.Key? key, + _i44.Key? key, required String id, - required _i42.AlbumSimple album, - List<_i40.PageRouteInfo>? children, + required _i45.AlbumSimple album, + List<_i43.PageRouteInfo>? children, }) : super( AlbumRoute.name, args: AlbumRouteArgs( @@ -98,7 +100,7 @@ class AlbumRoute extends _i40.PageRouteInfo { static const String name = 'AlbumRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final args = data.argsAs(); @@ -118,11 +120,11 @@ class AlbumRouteArgs { required this.album, }); - final _i41.Key? key; + final _i44.Key? key; final String id; - final _i42.AlbumSimple album; + final _i45.AlbumSimple album; @override String toString() { @@ -132,11 +134,11 @@ class AlbumRouteArgs { /// generated route for /// [_i3.ArtistPage] -class ArtistRoute extends _i40.PageRouteInfo { +class ArtistRoute extends _i43.PageRouteInfo { ArtistRoute({ required String artistId, - _i41.Key? key, - List<_i40.PageRouteInfo>? children, + _i44.Key? key, + List<_i43.PageRouteInfo>? children, }) : super( ArtistRoute.name, args: ArtistRouteArgs( @@ -149,7 +151,7 @@ class ArtistRoute extends _i40.PageRouteInfo { static const String name = 'ArtistRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final pathParams = data.inheritedPathParams; @@ -171,7 +173,7 @@ class ArtistRouteArgs { final String artistId; - final _i41.Key? key; + final _i44.Key? key; @override String toString() { @@ -181,8 +183,8 @@ class ArtistRouteArgs { /// generated route for /// [_i4.BlackListPage] -class BlackListRoute extends _i40.PageRouteInfo { - const BlackListRoute({List<_i40.PageRouteInfo>? children}) +class BlackListRoute extends _i43.PageRouteInfo { + const BlackListRoute({List<_i43.PageRouteInfo>? children}) : super( BlackListRoute.name, initialChildren: children, @@ -190,7 +192,7 @@ class BlackListRoute extends _i40.PageRouteInfo { static const String name = 'BlackListRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i4.BlackListPage(); @@ -200,8 +202,8 @@ class BlackListRoute extends _i40.PageRouteInfo { /// generated route for /// [_i5.ConnectControlPage] -class ConnectControlRoute extends _i40.PageRouteInfo { - const ConnectControlRoute({List<_i40.PageRouteInfo>? children}) +class ConnectControlRoute extends _i43.PageRouteInfo { + const ConnectControlRoute({List<_i43.PageRouteInfo>? children}) : super( ConnectControlRoute.name, initialChildren: children, @@ -209,7 +211,7 @@ class ConnectControlRoute extends _i40.PageRouteInfo { static const String name = 'ConnectControlRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i5.ConnectControlPage(); @@ -219,8 +221,8 @@ class ConnectControlRoute extends _i40.PageRouteInfo { /// generated route for /// [_i6.ConnectPage] -class ConnectRoute extends _i40.PageRouteInfo { - const ConnectRoute({List<_i40.PageRouteInfo>? children}) +class ConnectRoute extends _i43.PageRouteInfo { + const ConnectRoute({List<_i43.PageRouteInfo>? children}) : super( ConnectRoute.name, initialChildren: children, @@ -228,7 +230,7 @@ class ConnectRoute extends _i40.PageRouteInfo { static const String name = 'ConnectRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i6.ConnectPage(); @@ -238,8 +240,8 @@ class ConnectRoute extends _i40.PageRouteInfo { /// generated route for /// [_i7.GenrePage] -class GenreRoute extends _i40.PageRouteInfo { - const GenreRoute({List<_i40.PageRouteInfo>? children}) +class GenreRoute extends _i43.PageRouteInfo { + const GenreRoute({List<_i43.PageRouteInfo>? children}) : super( GenreRoute.name, initialChildren: children, @@ -247,7 +249,7 @@ class GenreRoute extends _i40.PageRouteInfo { static const String name = 'GenreRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i7.GenrePage(); @@ -257,12 +259,12 @@ class GenreRoute extends _i40.PageRouteInfo { /// generated route for /// [_i8.GenrePlaylistsPage] -class GenrePlaylistsRoute extends _i40.PageRouteInfo { +class GenrePlaylistsRoute extends _i43.PageRouteInfo { GenrePlaylistsRoute({ - _i43.Key? key, + _i44.Key? key, required String id, - required _i42.Category category, - List<_i40.PageRouteInfo>? children, + required _i45.Category category, + List<_i43.PageRouteInfo>? children, }) : super( GenrePlaylistsRoute.name, args: GenrePlaylistsRouteArgs( @@ -276,7 +278,7 @@ class GenrePlaylistsRoute extends _i40.PageRouteInfo { static const String name = 'GenrePlaylistsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final args = data.argsAs(); @@ -296,11 +298,11 @@ class GenrePlaylistsRouteArgs { required this.category, }); - final _i43.Key? key; + final _i44.Key? key; final String id; - final _i42.Category category; + final _i45.Category category; @override String toString() { @@ -310,8 +312,8 @@ class GenrePlaylistsRouteArgs { /// generated route for /// [_i9.GettingStartedPage] -class GettingStartedRoute extends _i40.PageRouteInfo { - const GettingStartedRoute({List<_i40.PageRouteInfo>? children}) +class GettingStartedRoute extends _i43.PageRouteInfo { + const GettingStartedRoute({List<_i43.PageRouteInfo>? children}) : super( GettingStartedRoute.name, initialChildren: children, @@ -319,7 +321,7 @@ class GettingStartedRoute extends _i40.PageRouteInfo { static const String name = 'GettingStartedRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i9.GettingStartedPage(); @@ -330,11 +332,11 @@ class GettingStartedRoute extends _i40.PageRouteInfo { /// generated route for /// [_i10.HomeFeedSectionPage] class HomeFeedSectionRoute - extends _i40.PageRouteInfo { + extends _i43.PageRouteInfo { HomeFeedSectionRoute({ - _i41.Key? key, + _i46.Key? key, required String sectionUri, - List<_i40.PageRouteInfo>? children, + List<_i43.PageRouteInfo>? children, }) : super( HomeFeedSectionRoute.name, args: HomeFeedSectionRouteArgs( @@ -347,7 +349,7 @@ class HomeFeedSectionRoute static const String name = 'HomeFeedSectionRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final pathParams = data.inheritedPathParams; @@ -368,7 +370,7 @@ class HomeFeedSectionRouteArgs { required this.sectionUri, }); - final _i41.Key? key; + final _i46.Key? key; final String sectionUri; @@ -380,8 +382,8 @@ class HomeFeedSectionRouteArgs { /// generated route for /// [_i11.HomePage] -class HomeRoute extends _i40.PageRouteInfo { - const HomeRoute({List<_i40.PageRouteInfo>? children}) +class HomeRoute extends _i43.PageRouteInfo { + const HomeRoute({List<_i43.PageRouteInfo>? children}) : super( HomeRoute.name, initialChildren: children, @@ -389,7 +391,7 @@ class HomeRoute extends _i40.PageRouteInfo { static const String name = 'HomeRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i11.HomePage(); @@ -399,8 +401,8 @@ class HomeRoute extends _i40.PageRouteInfo { /// generated route for /// [_i12.LastFMLoginPage] -class LastFMLoginRoute extends _i40.PageRouteInfo { - const LastFMLoginRoute({List<_i40.PageRouteInfo>? children}) +class LastFMLoginRoute extends _i43.PageRouteInfo { + const LastFMLoginRoute({List<_i43.PageRouteInfo>? children}) : super( LastFMLoginRoute.name, initialChildren: children, @@ -408,7 +410,7 @@ class LastFMLoginRoute extends _i40.PageRouteInfo { static const String name = 'LastFMLoginRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i12.LastFMLoginPage(); @@ -418,8 +420,8 @@ class LastFMLoginRoute extends _i40.PageRouteInfo { /// generated route for /// [_i13.LibraryPage] -class LibraryRoute extends _i40.PageRouteInfo { - const LibraryRoute({List<_i40.PageRouteInfo>? children}) +class LibraryRoute extends _i43.PageRouteInfo { + const LibraryRoute({List<_i43.PageRouteInfo>? children}) : super( LibraryRoute.name, initialChildren: children, @@ -427,7 +429,7 @@ class LibraryRoute extends _i40.PageRouteInfo { static const String name = 'LibraryRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i13.LibraryPage(); @@ -437,11 +439,11 @@ class LibraryRoute extends _i40.PageRouteInfo { /// generated route for /// [_i14.LikedPlaylistPage] -class LikedPlaylistRoute extends _i40.PageRouteInfo { +class LikedPlaylistRoute extends _i43.PageRouteInfo { LikedPlaylistRoute({ _i44.Key? key, - required _i42.PlaylistSimple playlist, - List<_i40.PageRouteInfo>? children, + required _i45.PlaylistSimple playlist, + List<_i43.PageRouteInfo>? children, }) : super( LikedPlaylistRoute.name, args: LikedPlaylistRouteArgs( @@ -453,7 +455,7 @@ class LikedPlaylistRoute extends _i40.PageRouteInfo { static const String name = 'LikedPlaylistRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final args = data.argsAs(); @@ -473,7 +475,7 @@ class LikedPlaylistRouteArgs { final _i44.Key? key; - final _i42.PlaylistSimple playlist; + final _i45.PlaylistSimple playlist; @override String toString() { @@ -483,13 +485,13 @@ class LikedPlaylistRouteArgs { /// generated route for /// [_i15.LocalLibraryPage] -class LocalLibraryRoute extends _i40.PageRouteInfo { +class LocalLibraryRoute extends _i43.PageRouteInfo { LocalLibraryRoute({ required String location, - _i41.Key? key, + _i44.Key? key, bool isDownloads = false, bool isCache = false, - List<_i40.PageRouteInfo>? children, + List<_i43.PageRouteInfo>? children, }) : super( LocalLibraryRoute.name, args: LocalLibraryRouteArgs( @@ -503,7 +505,7 @@ class LocalLibraryRoute extends _i40.PageRouteInfo { static const String name = 'LocalLibraryRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final args = data.argsAs(); @@ -527,7 +529,7 @@ class LocalLibraryRouteArgs { final String location; - final _i41.Key? key; + final _i44.Key? key; final bool isDownloads; @@ -541,8 +543,8 @@ class LocalLibraryRouteArgs { /// generated route for /// [_i16.LogsPage] -class LogsRoute extends _i40.PageRouteInfo { - const LogsRoute({List<_i40.PageRouteInfo>? children}) +class LogsRoute extends _i43.PageRouteInfo { + const LogsRoute({List<_i43.PageRouteInfo>? children}) : super( LogsRoute.name, initialChildren: children, @@ -550,7 +552,7 @@ class LogsRoute extends _i40.PageRouteInfo { static const String name = 'LogsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { return const _i16.LogsPage(); @@ -560,58 +562,30 @@ class LogsRoute extends _i40.PageRouteInfo { /// generated route for /// [_i17.LyricsPage] -class LyricsRoute extends _i40.PageRouteInfo { - LyricsRoute({ - _i41.Key? key, - bool isModal = false, - List<_i40.PageRouteInfo>? children, - }) : super( +class LyricsRoute extends _i43.PageRouteInfo { + const LyricsRoute({List<_i43.PageRouteInfo>? children}) + : super( LyricsRoute.name, - args: LyricsRouteArgs( - key: key, - isModal: isModal, - ), initialChildren: children, ); static const String name = 'LyricsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - final args = - data.argsAs(orElse: () => const LyricsRouteArgs()); - return _i17.LyricsPage( - key: args.key, - isModal: args.isModal, - ); + return const _i17.LyricsPage(); }, ); } -class LyricsRouteArgs { - const LyricsRouteArgs({ - this.key, - this.isModal = false, - }); - - final _i41.Key? key; - - final bool isModal; - - @override - String toString() { - return 'LyricsRouteArgs{key: $key, isModal: $isModal}'; - } -} - /// generated route for /// [_i18.MiniLyricsPage] -class MiniLyricsRoute extends _i40.PageRouteInfo { +class MiniLyricsRoute extends _i43.PageRouteInfo { MiniLyricsRoute({ - _i41.Key? key, - required _i41.Size prevSize, - List<_i40.PageRouteInfo>? children, + _i46.Key? key, + required _i46.Size prevSize, + List<_i43.PageRouteInfo>? children, }) : super( MiniLyricsRoute.name, args: MiniLyricsRouteArgs( @@ -623,7 +597,7 @@ class MiniLyricsRoute extends _i40.PageRouteInfo { static const String name = 'MiniLyricsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final args = data.argsAs(); @@ -641,9 +615,9 @@ class MiniLyricsRouteArgs { required this.prevSize, }); - final _i41.Key? key; + final _i46.Key? key; - final _i41.Size prevSize; + final _i46.Size prevSize; @override String toString() { @@ -652,13 +626,70 @@ class MiniLyricsRouteArgs { } /// generated route for -/// [_i19.PlaylistGenerateResultPage] +/// [_i19.PlayerLyricsPage] +class PlayerLyricsRoute extends _i43.PageRouteInfo { + const PlayerLyricsRoute({List<_i43.PageRouteInfo>? children}) + : super( + PlayerLyricsRoute.name, + initialChildren: children, + ); + + static const String name = 'PlayerLyricsRoute'; + + static _i43.PageInfo page = _i43.PageInfo( + name, + builder: (data) { + return const _i19.PlayerLyricsPage(); + }, + ); +} + +/// generated route for +/// [_i20.PlayerQueuePage] +class PlayerQueueRoute extends _i43.PageRouteInfo { + const PlayerQueueRoute({List<_i43.PageRouteInfo>? children}) + : super( + PlayerQueueRoute.name, + initialChildren: children, + ); + + static const String name = 'PlayerQueueRoute'; + + static _i43.PageInfo page = _i43.PageInfo( + name, + builder: (data) { + return const _i20.PlayerQueuePage(); + }, + ); +} + +/// generated route for +/// [_i21.PlayerTrackSourcesPage] +class PlayerTrackSourcesRoute extends _i43.PageRouteInfo { + const PlayerTrackSourcesRoute({List<_i43.PageRouteInfo>? children}) + : super( + PlayerTrackSourcesRoute.name, + initialChildren: children, + ); + + static const String name = 'PlayerTrackSourcesRoute'; + + static _i43.PageInfo page = _i43.PageInfo( + name, + builder: (data) { + return const _i21.PlayerTrackSourcesPage(); + }, + ); +} + +/// generated route for +/// [_i22.PlaylistGenerateResultPage] class PlaylistGenerateResultRoute - extends _i40.PageRouteInfo { + extends _i43.PageRouteInfo { PlaylistGenerateResultRoute({ - _i41.Key? key, - required _i45.GeneratePlaylistProviderInput state, - List<_i40.PageRouteInfo>? children, + _i46.Key? key, + required _i47.GeneratePlaylistProviderInput state, + List<_i43.PageRouteInfo>? children, }) : super( PlaylistGenerateResultRoute.name, args: PlaylistGenerateResultRouteArgs( @@ -670,11 +701,11 @@ class PlaylistGenerateResultRoute static const String name = 'PlaylistGenerateResultRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final args = data.argsAs(); - return _i19.PlaylistGenerateResultPage( + return _i22.PlaylistGenerateResultPage( key: args.key, state: args.state, ); @@ -688,9 +719,9 @@ class PlaylistGenerateResultRouteArgs { required this.state, }); - final _i41.Key? key; + final _i46.Key? key; - final _i45.GeneratePlaylistProviderInput state; + final _i47.GeneratePlaylistProviderInput state; @override String toString() { @@ -699,9 +730,9 @@ class PlaylistGenerateResultRouteArgs { } /// generated route for -/// [_i20.PlaylistGeneratorPage] -class PlaylistGeneratorRoute extends _i40.PageRouteInfo { - const PlaylistGeneratorRoute({List<_i40.PageRouteInfo>? children}) +/// [_i23.PlaylistGeneratorPage] +class PlaylistGeneratorRoute extends _i43.PageRouteInfo { + const PlaylistGeneratorRoute({List<_i43.PageRouteInfo>? children}) : super( PlaylistGeneratorRoute.name, initialChildren: children, @@ -709,22 +740,22 @@ class PlaylistGeneratorRoute extends _i40.PageRouteInfo { static const String name = 'PlaylistGeneratorRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i20.PlaylistGeneratorPage(); + return const _i23.PlaylistGeneratorPage(); }, ); } /// generated route for -/// [_i21.PlaylistPage] -class PlaylistRoute extends _i40.PageRouteInfo { +/// [_i24.PlaylistPage] +class PlaylistRoute extends _i43.PageRouteInfo { PlaylistRoute({ - _i43.Key? key, + _i44.Key? key, required String id, - required _i42.PlaylistSimple playlist, - List<_i40.PageRouteInfo>? children, + required _i45.PlaylistSimple playlist, + List<_i43.PageRouteInfo>? children, }) : super( PlaylistRoute.name, args: PlaylistRouteArgs( @@ -738,11 +769,11 @@ class PlaylistRoute extends _i40.PageRouteInfo { static const String name = 'PlaylistRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final args = data.argsAs(); - return _i21.PlaylistPage( + return _i24.PlaylistPage( key: args.key, id: args.id, playlist: args.playlist, @@ -758,11 +789,11 @@ class PlaylistRouteArgs { required this.playlist, }); - final _i43.Key? key; + final _i44.Key? key; final String id; - final _i42.PlaylistSimple playlist; + final _i45.PlaylistSimple playlist; @override String toString() { @@ -771,9 +802,9 @@ class PlaylistRouteArgs { } /// generated route for -/// [_i22.ProfilePage] -class ProfileRoute extends _i40.PageRouteInfo { - const ProfileRoute({List<_i40.PageRouteInfo>? children}) +/// [_i25.ProfilePage] +class ProfileRoute extends _i43.PageRouteInfo { + const ProfileRoute({List<_i43.PageRouteInfo>? children}) : super( ProfileRoute.name, initialChildren: children, @@ -781,18 +812,18 @@ class ProfileRoute extends _i40.PageRouteInfo { static const String name = 'ProfileRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i22.ProfilePage(); + return const _i25.ProfilePage(); }, ); } /// generated route for -/// [_i23.RootAppPage] -class RootAppRoute extends _i40.PageRouteInfo { - const RootAppRoute({List<_i40.PageRouteInfo>? children}) +/// [_i26.RootAppPage] +class RootAppRoute extends _i43.PageRouteInfo { + const RootAppRoute({List<_i43.PageRouteInfo>? children}) : super( RootAppRoute.name, initialChildren: children, @@ -800,18 +831,18 @@ class RootAppRoute extends _i40.PageRouteInfo { static const String name = 'RootAppRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i23.RootAppPage(); + return const _i26.RootAppPage(); }, ); } /// generated route for -/// [_i24.SearchPage] -class SearchRoute extends _i40.PageRouteInfo { - const SearchRoute({List<_i40.PageRouteInfo>? children}) +/// [_i27.SearchPage] +class SearchRoute extends _i43.PageRouteInfo { + const SearchRoute({List<_i43.PageRouteInfo>? children}) : super( SearchRoute.name, initialChildren: children, @@ -819,18 +850,18 @@ class SearchRoute extends _i40.PageRouteInfo { static const String name = 'SearchRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i24.SearchPage(); + return const _i27.SearchPage(); }, ); } /// generated route for -/// [_i25.SettingsPage] -class SettingsRoute extends _i40.PageRouteInfo { - const SettingsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i28.SettingsPage] +class SettingsRoute extends _i43.PageRouteInfo { + const SettingsRoute({List<_i43.PageRouteInfo>? children}) : super( SettingsRoute.name, initialChildren: children, @@ -838,18 +869,18 @@ class SettingsRoute extends _i40.PageRouteInfo { static const String name = 'SettingsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i25.SettingsPage(); + return const _i28.SettingsPage(); }, ); } /// generated route for -/// [_i26.StatsAlbumsPage] -class StatsAlbumsRoute extends _i40.PageRouteInfo { - const StatsAlbumsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i29.StatsAlbumsPage] +class StatsAlbumsRoute extends _i43.PageRouteInfo { + const StatsAlbumsRoute({List<_i43.PageRouteInfo>? children}) : super( StatsAlbumsRoute.name, initialChildren: children, @@ -857,18 +888,18 @@ class StatsAlbumsRoute extends _i40.PageRouteInfo { static const String name = 'StatsAlbumsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i26.StatsAlbumsPage(); + return const _i29.StatsAlbumsPage(); }, ); } /// generated route for -/// [_i27.StatsArtistsPage] -class StatsArtistsRoute extends _i40.PageRouteInfo { - const StatsArtistsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i30.StatsArtistsPage] +class StatsArtistsRoute extends _i43.PageRouteInfo { + const StatsArtistsRoute({List<_i43.PageRouteInfo>? children}) : super( StatsArtistsRoute.name, initialChildren: children, @@ -876,18 +907,18 @@ class StatsArtistsRoute extends _i40.PageRouteInfo { static const String name = 'StatsArtistsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i27.StatsArtistsPage(); + return const _i30.StatsArtistsPage(); }, ); } /// generated route for -/// [_i28.StatsMinutesPage] -class StatsMinutesRoute extends _i40.PageRouteInfo { - const StatsMinutesRoute({List<_i40.PageRouteInfo>? children}) +/// [_i31.StatsMinutesPage] +class StatsMinutesRoute extends _i43.PageRouteInfo { + const StatsMinutesRoute({List<_i43.PageRouteInfo>? children}) : super( StatsMinutesRoute.name, initialChildren: children, @@ -895,18 +926,18 @@ class StatsMinutesRoute extends _i40.PageRouteInfo { static const String name = 'StatsMinutesRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i28.StatsMinutesPage(); + return const _i31.StatsMinutesPage(); }, ); } /// generated route for -/// [_i29.StatsPage] -class StatsRoute extends _i40.PageRouteInfo { - const StatsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i32.StatsPage] +class StatsRoute extends _i43.PageRouteInfo { + const StatsRoute({List<_i43.PageRouteInfo>? children}) : super( StatsRoute.name, initialChildren: children, @@ -914,18 +945,18 @@ class StatsRoute extends _i40.PageRouteInfo { static const String name = 'StatsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i29.StatsPage(); + return const _i32.StatsPage(); }, ); } /// generated route for -/// [_i30.StatsPlaylistsPage] -class StatsPlaylistsRoute extends _i40.PageRouteInfo { - const StatsPlaylistsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i33.StatsPlaylistsPage] +class StatsPlaylistsRoute extends _i43.PageRouteInfo { + const StatsPlaylistsRoute({List<_i43.PageRouteInfo>? children}) : super( StatsPlaylistsRoute.name, initialChildren: children, @@ -933,18 +964,18 @@ class StatsPlaylistsRoute extends _i40.PageRouteInfo { static const String name = 'StatsPlaylistsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i30.StatsPlaylistsPage(); + return const _i33.StatsPlaylistsPage(); }, ); } /// generated route for -/// [_i31.StatsStreamFeesPage] -class StatsStreamFeesRoute extends _i40.PageRouteInfo { - const StatsStreamFeesRoute({List<_i40.PageRouteInfo>? children}) +/// [_i34.StatsStreamFeesPage] +class StatsStreamFeesRoute extends _i43.PageRouteInfo { + const StatsStreamFeesRoute({List<_i43.PageRouteInfo>? children}) : super( StatsStreamFeesRoute.name, initialChildren: children, @@ -952,18 +983,18 @@ class StatsStreamFeesRoute extends _i40.PageRouteInfo { static const String name = 'StatsStreamFeesRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i31.StatsStreamFeesPage(); + return const _i34.StatsStreamFeesPage(); }, ); } /// generated route for -/// [_i32.StatsStreamsPage] -class StatsStreamsRoute extends _i40.PageRouteInfo { - const StatsStreamsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i35.StatsStreamsPage] +class StatsStreamsRoute extends _i43.PageRouteInfo { + const StatsStreamsRoute({List<_i43.PageRouteInfo>? children}) : super( StatsStreamsRoute.name, initialChildren: children, @@ -971,21 +1002,21 @@ class StatsStreamsRoute extends _i40.PageRouteInfo { static const String name = 'StatsStreamsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i32.StatsStreamsPage(); + return const _i35.StatsStreamsPage(); }, ); } /// generated route for -/// [_i33.TrackPage] -class TrackRoute extends _i40.PageRouteInfo { +/// [_i36.TrackPage] +class TrackRoute extends _i43.PageRouteInfo { TrackRoute({ - _i41.Key? key, + _i46.Key? key, required String trackId, - List<_i40.PageRouteInfo>? children, + List<_i43.PageRouteInfo>? children, }) : super( TrackRoute.name, args: TrackRouteArgs( @@ -998,13 +1029,13 @@ class TrackRoute extends _i40.PageRouteInfo { static const String name = 'TrackRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { final pathParams = data.inheritedPathParams; final args = data.argsAs( orElse: () => TrackRouteArgs(trackId: pathParams.getString('id'))); - return _i33.TrackPage( + return _i36.TrackPage( key: args.key, trackId: args.trackId, ); @@ -1018,7 +1049,7 @@ class TrackRouteArgs { required this.trackId, }); - final _i41.Key? key; + final _i46.Key? key; final String trackId; @@ -1029,9 +1060,9 @@ class TrackRouteArgs { } /// generated route for -/// [_i34.UserAlbumsPage] -class UserAlbumsRoute extends _i40.PageRouteInfo { - const UserAlbumsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i37.UserAlbumsPage] +class UserAlbumsRoute extends _i43.PageRouteInfo { + const UserAlbumsRoute({List<_i43.PageRouteInfo>? children}) : super( UserAlbumsRoute.name, initialChildren: children, @@ -1039,18 +1070,18 @@ class UserAlbumsRoute extends _i40.PageRouteInfo { static const String name = 'UserAlbumsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i34.UserAlbumsPage(); + return const _i37.UserAlbumsPage(); }, ); } /// generated route for -/// [_i35.UserArtistsPage] -class UserArtistsRoute extends _i40.PageRouteInfo { - const UserArtistsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i38.UserArtistsPage] +class UserArtistsRoute extends _i43.PageRouteInfo { + const UserArtistsRoute({List<_i43.PageRouteInfo>? children}) : super( UserArtistsRoute.name, initialChildren: children, @@ -1058,18 +1089,18 @@ class UserArtistsRoute extends _i40.PageRouteInfo { static const String name = 'UserArtistsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i35.UserArtistsPage(); + return const _i38.UserArtistsPage(); }, ); } /// generated route for -/// [_i36.UserDownloadsPage] -class UserDownloadsRoute extends _i40.PageRouteInfo { - const UserDownloadsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i39.UserDownloadsPage] +class UserDownloadsRoute extends _i43.PageRouteInfo { + const UserDownloadsRoute({List<_i43.PageRouteInfo>? children}) : super( UserDownloadsRoute.name, initialChildren: children, @@ -1077,18 +1108,18 @@ class UserDownloadsRoute extends _i40.PageRouteInfo { static const String name = 'UserDownloadsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i36.UserDownloadsPage(); + return const _i39.UserDownloadsPage(); }, ); } /// generated route for -/// [_i37.UserLocalLibraryPage] -class UserLocalLibraryRoute extends _i40.PageRouteInfo { - const UserLocalLibraryRoute({List<_i40.PageRouteInfo>? children}) +/// [_i40.UserLocalLibraryPage] +class UserLocalLibraryRoute extends _i43.PageRouteInfo { + const UserLocalLibraryRoute({List<_i43.PageRouteInfo>? children}) : super( UserLocalLibraryRoute.name, initialChildren: children, @@ -1096,18 +1127,18 @@ class UserLocalLibraryRoute extends _i40.PageRouteInfo { static const String name = 'UserLocalLibraryRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i37.UserLocalLibraryPage(); + return const _i40.UserLocalLibraryPage(); }, ); } /// generated route for -/// [_i38.UserPlaylistsPage] -class UserPlaylistsRoute extends _i40.PageRouteInfo { - const UserPlaylistsRoute({List<_i40.PageRouteInfo>? children}) +/// [_i41.UserPlaylistsPage] +class UserPlaylistsRoute extends _i43.PageRouteInfo { + const UserPlaylistsRoute({List<_i43.PageRouteInfo>? children}) : super( UserPlaylistsRoute.name, initialChildren: children, @@ -1115,18 +1146,18 @@ class UserPlaylistsRoute extends _i40.PageRouteInfo { static const String name = 'UserPlaylistsRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i38.UserPlaylistsPage(); + return const _i41.UserPlaylistsPage(); }, ); } /// generated route for -/// [_i39.WebViewLoginPage] -class WebViewLoginRoute extends _i40.PageRouteInfo { - const WebViewLoginRoute({List<_i40.PageRouteInfo>? children}) +/// [_i42.WebViewLoginPage] +class WebViewLoginRoute extends _i43.PageRouteInfo { + const WebViewLoginRoute({List<_i43.PageRouteInfo>? children}) : super( WebViewLoginRoute.name, initialChildren: children, @@ -1134,10 +1165,10 @@ class WebViewLoginRoute extends _i40.PageRouteInfo { static const String name = 'WebViewLoginRoute'; - static _i40.PageInfo page = _i40.PageInfo( + static _i43.PageInfo page = _i43.PageInfo( name, builder: (data) { - return const _i39.WebViewLoginPage(); + return const _i42.WebViewLoginPage(); }, ); } diff --git a/lib/components/button/back_button.dart b/lib/components/button/back_button.dart index 17b93cea..42c952ab 100644 --- a/lib/components/button/back_button.dart +++ b/lib/components/button/back_button.dart @@ -3,18 +3,18 @@ import 'package:spotube/collections/spotube_icons.dart'; class BackButton extends StatelessWidget { final Color? color; + final IconData icon; const BackButton({ super.key, this.color, + this.icon = SpotubeIcons.angleLeft, }); @override Widget build(BuildContext context) { return IconButton.ghost( size: const ButtonSize(.9), - icon: color != null - ? Icon(SpotubeIcons.angleLeft, color: color) - : const Icon(SpotubeIcons.angleLeft), + icon: Icon(icon, color: color), onPressed: () => Navigator.of(context).pop(), ); } diff --git a/lib/modules/player/player.dart b/lib/modules/player/player.dart index 4335e298..4cf37b85 100644 --- a/lib/modules/player/player.dart +++ b/lib/modules/player/player.dart @@ -1,10 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:auto_size_text/auto_size_text.dart'; -import 'package:flutter/material.dart' show showModalBottomSheet; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shadcn_flutter/shadcn_flutter.dart'; -import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; import 'package:sliding_up_panel/sliding_up_panel.dart'; import 'package:spotube/collections/assets.gen.dart'; @@ -13,7 +11,6 @@ import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/framework/app_pop_scope.dart'; import 'package:spotube/modules/player/player_actions.dart'; import 'package:spotube/modules/player/player_controls.dart'; -import 'package:spotube/modules/player/player_queue.dart'; import 'package:spotube/modules/player/volume_slider.dart'; import 'package:spotube/components/dialogs/track_details_dialog.dart'; import 'package:spotube/components/links/artist_link.dart'; @@ -25,7 +22,6 @@ import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/models/local_track.dart'; import 'package:spotube/modules/root/spotube_navigation_bar.dart'; -import 'package:spotube/pages/lyrics/lyrics.dart'; import 'package:spotube/provider/authentication/authentication.dart'; import 'package:spotube/provider/audio_player/audio_player.dart'; import 'package:spotube/provider/server/active_sourced_track.dart'; @@ -235,39 +231,7 @@ class PlayerView extends HookConsumerWidget { leading: const Icon(SpotubeIcons.queue), child: Text(context.l10n.queue), onPressed: () { - openDrawer( - context: context, - barrierDismissible: true, - draggable: true, - barrierColor: Colors.black.withAlpha(100), - borderRadius: BorderRadius.circular(10), - transformBackdrop: false, - position: OverlayPosition.bottom, - surfaceBlur: context.theme.surfaceBlur, - surfaceOpacity: 0.7, - expands: true, - builder: (context) => Consumer( - builder: (context, ref, _) { - final playlist = ref.watch( - audioPlayerProvider, - ); - final playlistNotifier = - ref.read(audioPlayerProvider.notifier); - return ConstrainedBox( - constraints: BoxConstraints( - maxHeight: - MediaQuery.of(context).size.height * - 0.8, - ), - child: PlayerQueue.fromAudioPlayerNotifier( - floating: false, - playlist: playlist, - notifier: playlistNotifier, - ), - ); - }, - ), - ); + context.pushRoute(const PlayerQueueRoute()); }, ), ), @@ -278,22 +242,7 @@ class PlayerView extends HookConsumerWidget { leading: const Icon(SpotubeIcons.music), child: Text(context.l10n.lyrics), onPressed: () { - showModalBottomSheet( - context: context, - isDismissible: true, - enableDrag: true, - isScrollControlled: true, - backgroundColor: Colors.black.withAlpha(100), - barrierColor: Colors.black.withAlpha(100), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - ), - ), - builder: (context) => - const LyricsPage(isModal: true), - ); + context.pushRoute(const PlayerLyricsRoute()); }, ), ), diff --git a/lib/modules/player/player_actions.dart b/lib/modules/player/player_actions.dart index 584af70d..d4d8a239 100644 --- a/lib/modules/player/player_actions.dart +++ b/lib/modules/player/player_actions.dart @@ -1,8 +1,10 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shadcn_flutter/shadcn_flutter.dart'; import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; +import 'package:spotube/collections/routes.gr.dart'; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/extensions/constrains.dart'; @@ -141,30 +143,7 @@ class PlayerActions extends HookConsumerWidget { }, ); } else { - openDrawer( - context: context, - position: OverlayPosition.bottom, - barrierDismissible: true, - draggable: true, - barrierColor: Colors.black.withValues(alpha: .2), - borderRadius: BorderRadius.circular(10), - transformBackdrop: false, - surfaceBlur: context.theme.surfaceBlur, - surfaceOpacity: context.theme.surfaceOpacity, - builder: (context) { - return Card( - borderWidth: 0, - borderColor: Colors.transparent, - padding: EdgeInsets.zero, - child: ConstrainedBox( - constraints: BoxConstraints( - maxHeight: screenSize.height * .8, - ), - child: SiblingTracksSheet(floating: floatingQueue), - ), - ); - }, - ); + context.pushRoute(const PlayerTrackSourcesRoute()); } }, ), diff --git a/lib/modules/player/sibling_tracks_sheet.dart b/lib/modules/player/sibling_tracks_sheet.dart index 8fa413aa..4404e7f1 100644 --- a/lib/modules/player/sibling_tracks_sheet.dart +++ b/lib/modules/player/sibling_tracks_sheet.dart @@ -6,6 +6,7 @@ import 'package:shadcn_flutter/shadcn_flutter.dart'; import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/collections/spotube_icons.dart'; +import 'package:spotube/components/button/back_button.dart'; import 'package:spotube/components/image/universal_image.dart'; import 'package:spotube/components/inter_scrollbar/inter_scrollbar.dart'; import 'package:spotube/components/ui/button_tile.dart'; @@ -244,14 +245,15 @@ class SiblingTracksSheet extends HookConsumerWidget { ), ), const Spacer(), - if (!isSearching.value) + if (!isSearching.value) ...[ IconButton.outline( icon: const Icon(SpotubeIcons.search, size: 18), onPressed: () { isSearching.value = true; }, - ) - else ...[ + ), + if (!floating) const BackButton(icon: SpotubeIcons.close) + ] else ...[ if (preferences.audioSource == AudioSource.piped) IconButton.outline( icon: const Icon(SpotubeIcons.filter, size: 18), diff --git a/lib/pages/lyrics/lyrics.dart b/lib/pages/lyrics/lyrics.dart index a42ac43a..98a238f0 100644 --- a/lib/pages/lyrics/lyrics.dart +++ b/lib/pages/lyrics/lyrics.dart @@ -3,7 +3,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shadcn_flutter/shadcn_flutter.dart'; import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; -import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/titlebar/titlebar.dart'; import 'package:spotube/components/image/universal_image.dart'; import 'package:spotube/extensions/context.dart'; @@ -20,8 +19,7 @@ import 'package:auto_route/auto_route.dart'; class LyricsPage extends HookConsumerWidget { static const name = "lyrics"; - final bool isModal; - const LyricsPage({super.key, this.isModal = false}); + const LyricsPage({super.key}); @override Widget build(BuildContext context, ref) { @@ -38,27 +36,14 @@ class LyricsPage extends HookConsumerWidget { Widget tabbar = Padding( padding: const EdgeInsets.all(10), - child: isModal - ? TabList( - index: selectedIndex.value, - onChanged: (index) => selectedIndex.value = index, - children: [ - TabItem( - child: Text(context.l10n.synced), - ), - TabItem( - child: Text(context.l10n.plain), - ), - ], - ) - : Tabs( - index: selectedIndex.value, - onChanged: (index) => selectedIndex.value = index, - children: [ - TabItem(child: Text(context.l10n.synced)), - TabItem(child: Text(context.l10n.plain)), - ], - ), + child: Tabs( + index: selectedIndex.value, + onChanged: (index) => selectedIndex.value = index, + children: [ + TabItem(child: Text(context.l10n.synced)), + TabItem(child: Text(context.l10n.plain)), + ], + ), ); tabbar = Row( @@ -85,52 +70,6 @@ class LyricsPage extends HookConsumerWidget { ], ); - if (isModal) { - return SafeArea( - bottom: false, - child: SurfaceCard( - surfaceBlur: context.theme.surfaceBlur, - surfaceOpacity: context.theme.surfaceOpacity, - padding: EdgeInsets.zero, - borderRadius: BorderRadius.zero, - borderWidth: 0, - child: Column( - children: [ - const SizedBox(height: 20), - Container( - height: 7, - width: 150, - decoration: BoxDecoration( - color: palette.titleTextColor, - borderRadius: BorderRadius.circular(10), - ), - ), - Row( - children: [ - Expanded( - child: tabbar, - ), - IconButton.ghost( - icon: const Icon(SpotubeIcons.minimize), - onPressed: () => Navigator.of(context).pop(), - ), - const SizedBox(width: 5), - ], - ), - Expanded( - child: IndexedStack( - index: selectedIndex.value, - children: [ - SyncedLyrics(palette: palette, isModal: isModal), - PlainLyrics(palette: palette, isModal: isModal), - ], - ), - ), - ], - ), - ), - ); - } return SafeArea( bottom: false, child: Scaffold( @@ -166,8 +105,8 @@ class LyricsPage extends HookConsumerWidget { child: IndexedStack( index: selectedIndex.value, children: [ - SyncedLyrics(palette: palette, isModal: isModal), - PlainLyrics(palette: palette, isModal: isModal), + SyncedLyrics(palette: palette, isModal: false), + PlainLyrics(palette: palette, isModal: false), ], ), ), diff --git a/lib/pages/player/lyrics.dart b/lib/pages/player/lyrics.dart new file mode 100644 index 00000000..2797d4b7 --- /dev/null +++ b/lib/pages/player/lyrics.dart @@ -0,0 +1,64 @@ +import 'package:auto_route/annotations.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:shadcn_flutter/shadcn_flutter.dart'; +import 'package:spotube/collections/spotube_icons.dart'; +import 'package:spotube/components/button/back_button.dart'; +import 'package:spotube/extensions/context.dart'; +import 'package:spotube/extensions/image.dart'; +import 'package:spotube/hooks/utils/use_palette_color.dart'; +import 'package:spotube/pages/lyrics/plain_lyrics.dart'; +import 'package:spotube/pages/lyrics/synced_lyrics.dart'; +import 'package:spotube/provider/audio_player/audio_player.dart'; + +@RoutePage() +class PlayerLyricsPage extends HookConsumerWidget { + const PlayerLyricsPage({super.key}); + + @override + Widget build(BuildContext context, ref) { + final playlist = ref.watch(audioPlayerProvider); + String albumArt = useMemoized( + () => (playlist.activeTrack?.album?.images).asUrlString( + index: (playlist.activeTrack?.album?.images?.length ?? 1) - 1, + placeholder: ImagePlaceholder.albumArt, + ), + [playlist.activeTrack?.album?.images], + ); + final selectedIndex = useState(0); + final palette = usePaletteColor(albumArt, ref); + + final tabbar = Padding( + padding: const EdgeInsets.all(10), + child: TabList( + index: selectedIndex.value, + onChanged: (index) => selectedIndex.value = index, + children: [ + TabItem( + child: Text(context.l10n.synced), + ), + TabItem( + child: Text(context.l10n.plain), + ), + ], + )); + + return Scaffold( + headers: [ + AppBar( + leading: [tabbar], + trailing: const [ + BackButton(icon: SpotubeIcons.close), + ], + ), + ], + child: IndexedStack( + index: selectedIndex.value, + children: [ + SyncedLyrics(palette: palette, isModal: false), + PlainLyrics(palette: palette, isModal: false), + ], + ), + ); + } +} diff --git a/lib/pages/player/queue.dart b/lib/pages/player/queue.dart new file mode 100644 index 00000000..1e3eefb9 --- /dev/null +++ b/lib/pages/player/queue.dart @@ -0,0 +1,36 @@ +import 'package:auto_route/annotations.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:shadcn_flutter/shadcn_flutter.dart'; +import 'package:spotube/collections/spotube_icons.dart'; +import 'package:spotube/components/button/back_button.dart'; +import 'package:spotube/extensions/context.dart'; +import 'package:spotube/modules/player/player_queue.dart'; +import 'package:spotube/provider/audio_player/audio_player.dart'; + +@RoutePage() +class PlayerQueuePage extends HookConsumerWidget { + const PlayerQueuePage({super.key}); + + @override + Widget build(BuildContext context, ref) { + final playlist = ref.watch( + audioPlayerProvider, + ); + final playlistNotifier = ref.read(audioPlayerProvider.notifier); + return Scaffold( + headers: [ + AppBar( + title: Text(context.l10n.queue), + trailing: const [ + BackButton(icon: SpotubeIcons.close), + ], + ), + ], + child: PlayerQueue.fromAudioPlayerNotifier( + floating: false, + playlist: playlist, + notifier: playlistNotifier, + ), + ); + } +} diff --git a/lib/pages/player/sources.dart b/lib/pages/player/sources.dart new file mode 100644 index 00000000..8e370daf --- /dev/null +++ b/lib/pages/player/sources.dart @@ -0,0 +1,15 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:shadcn_flutter/shadcn_flutter.dart'; +import 'package:spotube/modules/player/sibling_tracks_sheet.dart'; + +@RoutePage() +class PlayerTrackSourcesPage extends StatelessWidget { + const PlayerTrackSourcesPage({super.key}); + + @override + Widget build(BuildContext context) { + return const Scaffold( + child: SiblingTracksSheet(floating: false), + ); + } +}