mirror of
https://github.com/austinried/subtracks.git
synced 2026-02-10 23:02:43 +01:00
artist screen
This commit is contained in:
@@ -1,12 +1,105 @@
|
||||
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
class ArtistScreen extends StatelessWidget {
|
||||
const ArtistScreen({super.key});
|
||||
import '../../database/query.dart';
|
||||
import '../../sources/models.dart';
|
||||
import '../state/database.dart';
|
||||
import '../state/source.dart';
|
||||
import '../ui/cover_art_theme.dart';
|
||||
import '../ui/gradient.dart';
|
||||
import '../ui/images.dart';
|
||||
import '../ui/lists/albums_list.dart';
|
||||
|
||||
class ArtistScreen extends HookConsumerWidget {
|
||||
const ArtistScreen({
|
||||
super.key,
|
||||
required this.id,
|
||||
});
|
||||
|
||||
final String id;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Center(child: Text('Artist!')),
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final db = ref.watch(databaseProvider);
|
||||
final sourceId = ref.watch(sourceIdProvider);
|
||||
|
||||
final getArtist = useMemoized(
|
||||
() => db.libraryDao.getArtist(sourceId, id).getSingle(),
|
||||
);
|
||||
final artist = useFuture(getArtist).data;
|
||||
|
||||
if (artist == null) {
|
||||
return Container();
|
||||
}
|
||||
|
||||
final query = AlbumsQuery(
|
||||
sourceId: sourceId,
|
||||
// filter: IList([AlbumsFilter.artistId(artist.id)]),
|
||||
sort: IList([
|
||||
SortingTerm.albumsDesc(AlbumsColumn.year),
|
||||
SortingTerm.albumsAsc(AlbumsColumn.name),
|
||||
]),
|
||||
);
|
||||
|
||||
return CoverArtTheme(
|
||||
coverArt: artist.coverArt,
|
||||
child: Scaffold(
|
||||
body: GradientScrollView(
|
||||
slivers: [
|
||||
ArtistHeader(artist: artist),
|
||||
AlbumsList(query: query),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ArtistHeader extends StatelessWidget {
|
||||
const ArtistHeader({
|
||||
super.key,
|
||||
required this.artist,
|
||||
});
|
||||
|
||||
final Artist artist;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = TextTheme.of(context);
|
||||
final colorScheme = ColorScheme.of(context);
|
||||
|
||||
return SliverToBoxAdapter(
|
||||
child: Stack(
|
||||
fit: StackFit.passthrough,
|
||||
alignment: AlignmentGeometry.bottomCenter,
|
||||
children: [
|
||||
CoverArtImage(
|
||||
fit: BoxFit.cover,
|
||||
coverArt: artist.coverArt,
|
||||
thumbnail: false,
|
||||
),
|
||||
Container(
|
||||
color: colorScheme.surface.withAlpha(120),
|
||||
child: Padding(
|
||||
padding: EdgeInsetsGeometry.symmetric(vertical: 12),
|
||||
child: Text(
|
||||
artist.name,
|
||||
textAlign: TextAlign.center,
|
||||
style: textTheme.headlineLarge?.copyWith(
|
||||
shadows: [
|
||||
Shadow(
|
||||
blurRadius: 20,
|
||||
color: colorScheme.surface,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +77,13 @@ class LibraryTabBarView extends HookConsumerWidget {
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final sourceId = ref.watch(sourceIdProvider);
|
||||
|
||||
final albumsQuery = AlbumsQuery(
|
||||
sourceId: sourceId,
|
||||
sort: IList([
|
||||
SortingTerm.albumsDesc(AlbumsColumn.created),
|
||||
]),
|
||||
);
|
||||
|
||||
final songsQuery = SongsQuery(
|
||||
sourceId: sourceId,
|
||||
sort: IList([
|
||||
@@ -95,7 +102,7 @@ class LibraryTabBarView extends HookConsumerWidget {
|
||||
(tab) => TabScrollView(
|
||||
index: LibraryTab.values.indexOf(tab),
|
||||
sliver: switch (tab) {
|
||||
LibraryTab.albums => AlbumsGrid(),
|
||||
LibraryTab.albums => AlbumsGrid(query: albumsQuery),
|
||||
LibraryTab.artists => ArtistsList(),
|
||||
LibraryTab.playlists => PlaylistsList(),
|
||||
LibraryTab.songs => SongsList(
|
||||
@@ -107,7 +114,7 @@ class LibraryTabBarView extends HookConsumerWidget {
|
||||
onTap: () {},
|
||||
),
|
||||
),
|
||||
_ => ArtistsList(),
|
||||
_ => SliverToBoxAdapter(child: Container()),
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user