mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
Folder stucture re-organized by component
UserLibrary tab view added
This commit is contained in:
parent
b75256b481
commit
7cbb5a97a8
@ -1,8 +1,8 @@
|
|||||||
import 'package:flutter/material.dart' hide Page;
|
import 'package:flutter/material.dart' hide Page;
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/PlaylistCard.dart';
|
import 'package:spotube/components/Playlist/PlaylistCard.dart';
|
||||||
import 'package:spotube/components/PlaylistGenreView.dart';
|
import 'package:spotube/components/Playlist/PlaylistGenreView.dart';
|
||||||
import 'package:spotube/provider/SpotifyDI.dart';
|
import 'package:spotube/provider/SpotifyDI.dart';
|
||||||
|
|
||||||
class CategoryCard extends StatefulWidget {
|
class CategoryCard extends StatefulWidget {
|
@ -5,14 +5,14 @@ import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:oauth2/oauth2.dart' show AuthorizationException;
|
import 'package:oauth2/oauth2.dart' show AuthorizationException;
|
||||||
import 'package:spotify/spotify.dart' hide Image;
|
import 'package:spotify/spotify.dart' hide Image, Player;
|
||||||
import 'package:spotube/components/CategoryCard.dart';
|
import 'package:spotube/components/Catergory/CategoryCard.dart';
|
||||||
import 'package:spotube/components/Login.dart';
|
import 'package:spotube/components/Login.dart';
|
||||||
import 'package:spotube/components/Lyrics.dart';
|
import 'package:spotube/components/Lyrics.dart';
|
||||||
import 'package:spotube/components/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
import 'package:spotube/components/Player.dart' as player;
|
import 'package:spotube/components/Player/Player.dart';
|
||||||
import 'package:spotube/components/Settings.dart';
|
import 'package:spotube/components/Settings.dart';
|
||||||
import 'package:spotube/components/UserLibrary.dart';
|
import 'package:spotube/components/Library/UserLibrary.dart';
|
||||||
import 'package:spotube/helpers/oauth-login.dart';
|
import 'package:spotube/helpers/oauth-login.dart';
|
||||||
import 'package:spotube/models/LocalStorageKeys.dart';
|
import 'package:spotube/models/LocalStorageKeys.dart';
|
||||||
import 'package:spotube/models/sideBarTiles.dart';
|
import 'package:spotube/models/sideBarTiles.dart';
|
||||||
@ -132,7 +132,7 @@ class _HomeState extends State<Home> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Auth authProvider = Provider.of<Auth>(context);
|
Auth authProvider = Provider.of<Auth>(context);
|
||||||
if (!authProvider.isLoggedIn) {
|
if (!authProvider.isLoggedIn) {
|
||||||
return Login();
|
return const Login();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
@ -261,7 +261,7 @@ class _HomeState extends State<Home> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
// player itself
|
// player itself
|
||||||
const player.Player()
|
const Player()
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
10
lib/components/Library/UserArtists.dart
Normal file
10
lib/components/Library/UserArtists.dart
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class UserArtists extends StatelessWidget {
|
||||||
|
const UserArtists({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
}
|
37
lib/components/Library/UserLibrary.dart
Normal file
37
lib/components/Library/UserLibrary.dart
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import 'package:flutter/material.dart' hide Image;
|
||||||
|
import 'package:spotube/components/Library/UserPlaylists.dart';
|
||||||
|
|
||||||
|
class UserLibrary extends StatefulWidget {
|
||||||
|
const UserLibrary({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_UserLibraryState createState() => _UserLibraryState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _UserLibraryState extends State<UserLibrary> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Expanded(
|
||||||
|
child: DefaultTabController(
|
||||||
|
length: 3,
|
||||||
|
child: Scaffold(
|
||||||
|
appBar: TabBar(
|
||||||
|
indicator: const BoxDecoration(color: Colors.transparent),
|
||||||
|
labelColor: Theme.of(context).primaryColor,
|
||||||
|
unselectedLabelColor: Theme.of(context).textTheme.bodyText1?.color,
|
||||||
|
tabs: const [
|
||||||
|
Tab(text: "Playlist"),
|
||||||
|
Tab(text: "Artists"),
|
||||||
|
Tab(text: "Album"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
body: const TabBarView(children: [
|
||||||
|
UserPlaylists(),
|
||||||
|
Icon(Icons.ac_unit_outlined),
|
||||||
|
Icon(Icons.ac_unit_outlined),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,17 +1,12 @@
|
|||||||
import 'package:flutter/material.dart' hide Image;
|
import 'package:flutter/material.dart' hide Image;
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/PlaylistCard.dart';
|
import 'package:spotube/components/Playlist/PlaylistCard.dart';
|
||||||
import 'package:spotube/provider/SpotifyDI.dart';
|
import 'package:spotube/provider/SpotifyDI.dart';
|
||||||
|
|
||||||
class UserLibrary extends StatefulWidget {
|
class UserPlaylists extends StatelessWidget {
|
||||||
const UserLibrary({Key? key}) : super(key: key);
|
const UserPlaylists({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
|
||||||
_UserLibraryState createState() => _UserLibraryState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _UserLibraryState extends State<UserLibrary> {
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
SpotifyDI data = context.watch<SpotifyDI>();
|
SpotifyDI data = context.watch<SpotifyDI>();
|
||||||
@ -20,9 +15,7 @@ class _UserLibraryState extends State<UserLibrary> {
|
|||||||
future: data.spotifyApi.playlists.me.all(),
|
future: data.spotifyApi.playlists.me.all(),
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
if (!snapshot.hasData) {
|
if (!snapshot.hasData) {
|
||||||
return const Expanded(
|
return const Center(child: CircularProgressIndicator.adaptive());
|
||||||
child: Center(child: CircularProgressIndicator.adaptive()),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
Image image = Image();
|
Image image = Image();
|
||||||
image.height = 300;
|
image.height = 300;
|
||||||
@ -36,23 +29,19 @@ class _UserLibraryState extends State<UserLibrary> {
|
|||||||
image.url =
|
image.url =
|
||||||
"https://t.scdn.co/images/3099b3803ad9496896c43f22fe9be8c4.png";
|
"https://t.scdn.co/images/3099b3803ad9496896c43f22fe9be8c4.png";
|
||||||
likedTracksPlaylist.images = [image];
|
likedTracksPlaylist.images = [image];
|
||||||
return Expanded(
|
return SingleChildScrollView(
|
||||||
child: Scrollbar(
|
child: Padding(
|
||||||
child: SingleChildScrollView(
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: Padding(
|
child: Wrap(
|
||||||
padding: const EdgeInsets.all(8.0),
|
spacing: 20, // gap between adjacent chips
|
||||||
child: Wrap(
|
runSpacing: 20, // gap between lines
|
||||||
spacing: 20, // gap between adjacent chips
|
alignment: WrapAlignment.center,
|
||||||
runSpacing: 20, // gap between lines
|
children: [
|
||||||
alignment: WrapAlignment.center,
|
PlaylistCard(likedTracksPlaylist),
|
||||||
children: [
|
...snapshot.data!
|
||||||
PlaylistCard(likedTracksPlaylist),
|
.map((playlist) => PlaylistCard(playlist))
|
||||||
...snapshot.data!
|
.toList(),
|
||||||
.map((playlist) => PlaylistCard(playlist))
|
],
|
||||||
.toList(),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
@ -1,6 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:spotube/components/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
import 'package:spotube/helpers/oauth-login.dart';
|
import 'package:spotube/helpers/oauth-login.dart';
|
||||||
import 'package:spotube/provider/Auth.dart';
|
import 'package:spotube/provider/Auth.dart';
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ import 'package:cached_network_image/cached_network_image.dart';
|
|||||||
import 'package:hotkey_manager/hotkey_manager.dart';
|
import 'package:hotkey_manager/hotkey_manager.dart';
|
||||||
import 'package:just_audio/just_audio.dart';
|
import 'package:just_audio/just_audio.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/DownloadTrackButton.dart';
|
import 'package:spotube/components/Shared/DownloadTrackButton.dart';
|
||||||
import 'package:spotube/components/PlayerControls.dart';
|
import 'package:spotube/components/Player/PlayerControls.dart';
|
||||||
import 'package:spotube/helpers/artist-to-string.dart';
|
import 'package:spotube/helpers/artist-to-string.dart';
|
||||||
import 'package:spotube/helpers/search-youtube.dart';
|
import 'package:spotube/helpers/search-youtube.dart';
|
||||||
import 'package:spotube/models/GlobalKeyActions.dart';
|
import 'package:spotube/models/GlobalKeyActions.dart';
|
@ -2,7 +2,7 @@ import 'package:cached_network_image/cached_network_image.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/PlaylistView.dart';
|
import 'package:spotube/components/Playlist/PlaylistView.dart';
|
||||||
import 'package:spotube/provider/Playback.dart';
|
import 'package:spotube/provider/Playback.dart';
|
||||||
import 'package:spotube/provider/SpotifyDI.dart';
|
import 'package:spotube/provider/SpotifyDI.dart';
|
||||||
|
|
@ -1,8 +1,8 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
import 'package:spotify/spotify.dart';
|
||||||
import 'package:spotube/components/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
import 'package:spotube/components/PlaylistCard.dart';
|
import 'package:spotube/components/Playlist/PlaylistCard.dart';
|
||||||
import 'package:spotube/provider/SpotifyDI.dart';
|
import 'package:spotube/provider/SpotifyDI.dart';
|
||||||
|
|
||||||
class PlaylistGenreView extends StatefulWidget {
|
class PlaylistGenreView extends StatefulWidget {
|
@ -1,5 +1,5 @@
|
|||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:spotube/components/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
import 'package:spotube/helpers/zero-pad-num-str.dart';
|
import 'package:spotube/helpers/zero-pad-num-str.dart';
|
||||||
import 'package:spotube/provider/Playback.dart';
|
import 'package:spotube/provider/Playback.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
@ -1,7 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:spotube/components/PageWindowTitleBar.dart';
|
import 'package:spotube/components/Shared/PageWindowTitleBar.dart';
|
||||||
import 'package:spotube/main.dart';
|
import 'package:spotube/main.dart';
|
||||||
import 'package:spotube/models/LocalStorageKeys.dart';
|
import 'package:spotube/models/LocalStorageKeys.dart';
|
||||||
import 'package:spotube/provider/Auth.dart';
|
import 'package:spotube/provider/Auth.dart';
|
||||||
|
Loading…
Reference in New Issue
Block a user