mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-12 23:45:18 +00:00
refactor: use metadata artist object for artist card and artist page
This commit is contained in:
parent
4b09f6c96b
commit
b8cae569b4
@ -15,17 +15,20 @@ abstract class FakeData {
|
|||||||
..href = "text"
|
..href = "text"
|
||||||
..total = 1;
|
..total = 1;
|
||||||
|
|
||||||
static final Artist artist = Artist()
|
static final SpotubeFullArtistObject artist = SpotubeFullArtistObject(
|
||||||
..id = "1"
|
id: "1",
|
||||||
..name = "Wow artist Good!"
|
name: "What an artist",
|
||||||
..images = [image]
|
externalUri: "https://example.com",
|
||||||
..popularity = 1
|
followers: 10000,
|
||||||
..type = "type"
|
genres: ["genre"],
|
||||||
..uri = "uri"
|
images: [
|
||||||
..externalUrls = externalUrls
|
SpotubeImageObject(
|
||||||
..genres = ["genre"]
|
height: 100,
|
||||||
..href = "text"
|
width: 100,
|
||||||
..followers = followers;
|
url: "https://dummyimage.com/100x100/cfcfcf/cfcfcf.jpg",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
static final externalIds = ExternalIds()
|
static final externalIds = ExternalIds()
|
||||||
..isrc = "text"
|
..isrc = "text"
|
||||||
@ -40,7 +43,7 @@ abstract class FakeData {
|
|||||||
..label = "label"
|
..label = "label"
|
||||||
..popularity = 1
|
..popularity = 1
|
||||||
..albumType = AlbumType.album
|
..albumType = AlbumType.album
|
||||||
..artists = [artist]
|
// ..artists = [artist]
|
||||||
..availableMarkets = [Market.BD]
|
..availableMarkets = [Market.BD]
|
||||||
..externalUrls = externalUrls
|
..externalUrls = externalUrls
|
||||||
..href = "text"
|
..href = "text"
|
||||||
@ -83,7 +86,7 @@ abstract class FakeData {
|
|||||||
|
|
||||||
static final Track track = Track()
|
static final Track track = Track()
|
||||||
..id = "1"
|
..id = "1"
|
||||||
..artists = [artist, artist, artist]
|
// ..artists = [artist, artist, artist]
|
||||||
// ..album = albumSimple
|
// ..album = albumSimple
|
||||||
..availableMarkets = [Market.BD]
|
..availableMarkets = [Market.BD]
|
||||||
..discNumber = 1
|
..discNumber = 1
|
||||||
|
@ -4,7 +4,6 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
|||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
|
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
|
||||||
import 'package:skeletonizer/skeletonizer.dart';
|
import 'package:skeletonizer/skeletonizer.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
|
||||||
import 'package:spotube/collections/fake.dart';
|
import 'package:spotube/collections/fake.dart';
|
||||||
import 'package:spotube/models/metadata/metadata.dart';
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/modules/album/album_card.dart';
|
import 'package:spotube/modules/album/album_card.dart';
|
||||||
@ -31,14 +30,16 @@ class HorizontalPlaybuttonCardView<T> extends HookWidget {
|
|||||||
}) : assert(
|
}) : assert(
|
||||||
items.every(
|
items.every(
|
||||||
(item) =>
|
(item) =>
|
||||||
item is PlaylistSimple || item is Artist || item is AlbumSimple,
|
item is SpotubeSimpleAlbumObject ||
|
||||||
|
item is SpotubeSimplePlaylistObject ||
|
||||||
|
item is SpotubeFullArtistObject,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final scrollController = useScrollController();
|
final scrollController = useScrollController();
|
||||||
final isArtist = items.every((s) => s is Artist);
|
final isArtist = items.every((s) => s is SpotubeFullArtistObject);
|
||||||
final scale = context.theme.scaling;
|
final scale = context.theme.scaling;
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
@ -99,11 +100,12 @@ class HorizontalPlaybuttonCardView<T> extends HookWidget {
|
|||||||
final item = items[index];
|
final item = items[index];
|
||||||
|
|
||||||
return switch (item) {
|
return switch (item) {
|
||||||
PlaylistSimple() =>
|
SpotubeSimplePlaylistObject() =>
|
||||||
PlaylistCard(item as SpotubeSimplePlaylistObject),
|
PlaylistCard(item as SpotubeSimplePlaylistObject),
|
||||||
AlbumSimple() =>
|
SpotubeSimpleAlbumObject() =>
|
||||||
AlbumCard(item as SpotubeSimpleAlbumObject),
|
AlbumCard(item as SpotubeSimpleAlbumObject),
|
||||||
Artist() => ArtistCard(item as Artist),
|
SpotubeFullArtistObject() =>
|
||||||
|
ArtistCard(item as SpotubeFullArtistObject),
|
||||||
_ => const SizedBox.shrink(),
|
_ => const SizedBox.shrink(),
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
|
||||||
import 'package:spotube/components/horizontal_playbutton_card_view/horizontal_playbutton_card_view.dart';
|
import 'package:spotube/components/horizontal_playbutton_card_view/horizontal_playbutton_card_view.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
|
import 'package:spotube/provider/metadata_plugin/artist/albums.dart';
|
||||||
import 'package:spotube/provider/spotify/spotify.dart';
|
import 'package:spotube/provider/spotify/spotify.dart';
|
||||||
|
|
||||||
class ArtistAlbumList extends HookConsumerWidget {
|
class ArtistAlbumList extends HookConsumerWidget {
|
||||||
@ -15,15 +16,15 @@ class ArtistAlbumList extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final albumsQuery = ref.watch(artistAlbumsProvider(artistId));
|
final albumsQuery = ref.watch(metadataPluginArtistAlbumsProvider(artistId));
|
||||||
final albumsQueryNotifier =
|
final albumsQueryNotifier =
|
||||||
ref.watch(artistAlbumsProvider(artistId).notifier);
|
ref.watch(metadataPluginArtistAlbumsProvider(artistId).notifier);
|
||||||
|
|
||||||
final albums = albumsQuery.asData?.value.items ?? [];
|
final albums = albumsQuery.asData?.value.items ?? [];
|
||||||
|
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
return HorizontalPlaybuttonCardView<Album>(
|
return HorizontalPlaybuttonCardView<SpotubeSimpleAlbumObject>(
|
||||||
isLoadingNextPage: albumsQuery.isLoadingNextPage,
|
isLoadingNextPage: albumsQuery.isLoadingNextPage,
|
||||||
hasNextPage: albumsQuery.asData?.value.hasMore ?? false,
|
hasNextPage: albumsQuery.asData?.value.hasMore ?? false,
|
||||||
items: albums,
|
items: albums,
|
||||||
|
@ -4,16 +4,15 @@ import 'package:auto_size_text/auto_size_text.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
|
|
||||||
import 'package:spotify/spotify.dart';
|
|
||||||
import 'package:spotube/collections/routes.gr.dart';
|
import 'package:spotube/collections/routes.gr.dart';
|
||||||
import 'package:spotube/components/image/universal_image.dart';
|
import 'package:spotube/components/image/universal_image.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
import 'package:spotube/extensions/image.dart';
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
|
|
||||||
import 'package:spotube/provider/blacklist_provider.dart';
|
import 'package:spotube/provider/blacklist_provider.dart';
|
||||||
|
|
||||||
class ArtistCard extends HookConsumerWidget {
|
class ArtistCard extends HookConsumerWidget {
|
||||||
final Artist artist;
|
final SpotubeFullArtistObject artist;
|
||||||
const ArtistCard(this.artist, {super.key});
|
const ArtistCard(this.artist, {super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -36,18 +35,18 @@ class ArtistCard extends HookConsumerWidget {
|
|||||||
width: 180,
|
width: 180,
|
||||||
child: Button.card(
|
child: Button.card(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
context.navigateTo(ArtistRoute(artistId: artist.id!));
|
context.navigateTo(ArtistRoute(artistId: artist.id));
|
||||||
},
|
},
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Avatar(
|
Avatar(
|
||||||
initials: artist.name!.trim()[0].toUpperCase(),
|
initials: artist.name.trim()[0].toUpperCase(),
|
||||||
provider: backgroundImage,
|
provider: backgroundImage,
|
||||||
size: 130,
|
size: 130,
|
||||||
),
|
),
|
||||||
const Gap(10),
|
const Gap(10),
|
||||||
AutoSizeText(
|
AutoSizeText(
|
||||||
artist.name!,
|
artist.name,
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
|
@ -11,8 +11,9 @@ import 'package:spotube/extensions/context.dart';
|
|||||||
|
|
||||||
import 'package:spotube/pages/artist/section/footer.dart';
|
import 'package:spotube/pages/artist/section/footer.dart';
|
||||||
import 'package:spotube/pages/artist/section/header.dart';
|
import 'package:spotube/pages/artist/section/header.dart';
|
||||||
import 'package:spotube/pages/artist/section/related_artists.dart';
|
// import 'package:spotube/pages/artist/section/related_artists.dart';
|
||||||
import 'package:spotube/pages/artist/section/top_tracks.dart';
|
import 'package:spotube/pages/artist/section/top_tracks.dart';
|
||||||
|
import 'package:spotube/provider/metadata_plugin/artist/artist.dart';
|
||||||
import 'package:spotube/provider/spotify/spotify.dart';
|
import 'package:spotube/provider/spotify/spotify.dart';
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
|
|
||||||
@ -31,7 +32,7 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
final scrollController = useScrollController();
|
final scrollController = useScrollController();
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final artistQuery = ref.watch(artistProvider(artistId));
|
final artistQuery = ref.watch(metadataPluginArtistProvider(artistId));
|
||||||
|
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
bottom: false,
|
bottom: false,
|
||||||
@ -74,16 +75,16 @@ class ArtistPage extends HookConsumerWidget {
|
|||||||
ArtistPageTopTracks(artistId: artistId),
|
ArtistPageTopTracks(artistId: artistId),
|
||||||
const SliverGap(20),
|
const SliverGap(20),
|
||||||
SliverToBoxAdapter(child: ArtistAlbumList(artistId)),
|
SliverToBoxAdapter(child: ArtistAlbumList(artistId)),
|
||||||
SliverPadding(
|
// SliverPadding(
|
||||||
padding: const EdgeInsets.all(8.0),
|
// padding: const EdgeInsets.all(8.0),
|
||||||
sliver: SliverToBoxAdapter(
|
// sliver: SliverToBoxAdapter(
|
||||||
child: Text(
|
// child: Text(
|
||||||
context.l10n.fans_also_like,
|
// context.l10n.fans_also_like,
|
||||||
style: theme.typography.h4,
|
// style: theme.typography.h4,
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
ArtistPageRelatedArtists(artistId: artistId),
|
// ArtistPageRelatedArtists(artistId: artistId),
|
||||||
const SliverGap(20),
|
const SliverGap(20),
|
||||||
if (artistQuery.asData?.value != null)
|
if (artistQuery.asData?.value != null)
|
||||||
SliverToBoxAdapter(
|
SliverToBoxAdapter(
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:spotify/spotify.dart';
|
|
||||||
import 'package:spotube/collections/spotube_icons.dart';
|
import 'package:spotube/collections/spotube_icons.dart';
|
||||||
import 'package:spotube/components/image/universal_image.dart';
|
import 'package:spotube/components/image/universal_image.dart';
|
||||||
import 'package:spotube/extensions/constrains.dart';
|
import 'package:spotube/extensions/constrains.dart';
|
||||||
import 'package:spotube/extensions/image.dart';
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/provider/spotify/spotify.dart';
|
import 'package:spotube/provider/spotify/spotify.dart';
|
||||||
|
|
||||||
import 'package:url_launcher/url_launcher_string.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
class ArtistPageFooter extends ConsumerWidget {
|
class ArtistPageFooter extends ConsumerWidget {
|
||||||
final Artist artist;
|
final SpotubeFullArtistObject artist;
|
||||||
const ArtistPageFooter({super.key, required this.artist});
|
const ArtistPageFooter({super.key, required this.artist});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -8,10 +8,11 @@ import 'package:spotube/collections/spotube_icons.dart';
|
|||||||
import 'package:spotube/components/image/universal_image.dart';
|
import 'package:spotube/components/image/universal_image.dart';
|
||||||
import 'package:spotube/extensions/constrains.dart';
|
import 'package:spotube/extensions/constrains.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
import 'package:spotube/extensions/image.dart';
|
|
||||||
import 'package:spotube/models/database/database.dart';
|
import 'package:spotube/models/database/database.dart';
|
||||||
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/provider/authentication/authentication.dart';
|
import 'package:spotube/provider/authentication/authentication.dart';
|
||||||
import 'package:spotube/provider/blacklist_provider.dart';
|
import 'package:spotube/provider/blacklist_provider.dart';
|
||||||
|
import 'package:spotube/provider/metadata_plugin/artist/artist.dart';
|
||||||
import 'package:spotube/provider/spotify/spotify.dart';
|
import 'package:spotube/provider/spotify/spotify.dart';
|
||||||
import 'package:spotube/utils/primitive_utils.dart';
|
import 'package:spotube/utils/primitive_utils.dart';
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ class ArtistPageHeader extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final artistQuery = ref.watch(artistProvider(artistId));
|
final artistQuery = ref.watch(metadataPluginArtistProvider(artistId));
|
||||||
final artist = artistQuery.asData?.value ?? FakeData.artist;
|
final artist = artistQuery.asData?.value ?? FakeData.artist;
|
||||||
|
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
@ -30,7 +31,7 @@ class ArtistPageHeader extends HookConsumerWidget {
|
|||||||
final auth = ref.watch(authenticationProvider);
|
final auth = ref.watch(authenticationProvider);
|
||||||
ref.watch(blacklistProvider);
|
ref.watch(blacklistProvider);
|
||||||
final blacklistNotifier = ref.watch(blacklistProvider.notifier);
|
final blacklistNotifier = ref.watch(blacklistProvider.notifier);
|
||||||
final isBlackListed = blacklistNotifier.containsArtist(artist);
|
final isBlackListed = /* blacklistNotifier.containsArtist(artist) */ false;
|
||||||
|
|
||||||
final image = artist.images.asUrlString(
|
final image = artist.images.asUrlString(
|
||||||
placeholder: ImagePlaceholder.artist,
|
placeholder: ImagePlaceholder.artist,
|
||||||
@ -111,13 +112,11 @@ class ArtistPageHeader extends HookConsumerWidget {
|
|||||||
IconButton.ghost(
|
IconButton.ghost(
|
||||||
icon: const Icon(SpotubeIcons.share),
|
icon: const Icon(SpotubeIcons.share),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
if (artist.externalUrls?.spotify != null) {
|
await Clipboard.setData(
|
||||||
await Clipboard.setData(
|
ClipboardData(
|
||||||
ClipboardData(
|
text: artist.externalUri,
|
||||||
text: artist.externalUrls!.spotify!,
|
),
|
||||||
),
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
|
|
||||||
@ -199,7 +198,7 @@ class ArtistPageHeader extends HookConsumerWidget {
|
|||||||
child: AutoSizeText(
|
child: AutoSizeText(
|
||||||
context.l10n.followers(
|
context.l10n.followers(
|
||||||
PrimitiveUtils.toReadableNumber(
|
PrimitiveUtils.toReadableNumber(
|
||||||
artist.followers!.total!.toDouble(),
|
artist.followers!.toDouble(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
|
@ -3,6 +3,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:spotube/modules/artist/artist_card.dart';
|
import 'package:spotube/modules/artist/artist_card.dart';
|
||||||
import 'package:spotube/provider/spotify/spotify.dart';
|
import 'package:spotube/provider/spotify/spotify.dart';
|
||||||
|
|
||||||
|
@Deprecated("Related artists are no longer supported by Spotube")
|
||||||
class ArtistPageRelatedArtists extends ConsumerWidget {
|
class ArtistPageRelatedArtists extends ConsumerWidget {
|
||||||
final String artistId;
|
final String artistId;
|
||||||
const ArtistPageRelatedArtists({
|
const ArtistPageRelatedArtists({
|
||||||
@ -28,7 +29,11 @@ class ArtistPageRelatedArtists extends ConsumerWidget {
|
|||||||
),
|
),
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final artist = artists.elementAt(index);
|
final artist = artists.elementAt(index);
|
||||||
return ArtistCard(artist);
|
return SizedBox(
|
||||||
|
width: 180,
|
||||||
|
// child: ArtistCard(artist),
|
||||||
|
);
|
||||||
|
// return ArtistCard(artist);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -17,7 +17,8 @@ import 'package:spotube/components/inter_scrollbar/inter_scrollbar.dart';
|
|||||||
import 'package:spotube/components/waypoint.dart';
|
import 'package:spotube/components/waypoint.dart';
|
||||||
import 'package:spotube/extensions/constrains.dart';
|
import 'package:spotube/extensions/constrains.dart';
|
||||||
import 'package:spotube/extensions/context.dart';
|
import 'package:spotube/extensions/context.dart';
|
||||||
import 'package:spotube/provider/authentication/authentication.dart';
|
import 'package:spotube/provider/metadata_plugin/auth.dart';
|
||||||
|
import 'package:spotube/provider/metadata_plugin/library/artists.dart';
|
||||||
import 'package:spotube/provider/spotify/spotify.dart';
|
import 'package:spotube/provider/spotify/spotify.dart';
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
|
|
||||||
@ -28,10 +29,11 @@ class UserArtistsPage extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, ref) {
|
Widget build(BuildContext context, ref) {
|
||||||
final auth = ref.watch(authenticationProvider);
|
final authenticated = ref.watch(metadataPluginAuthenticatedProvider);
|
||||||
|
|
||||||
final artistQuery = ref.watch(followedArtistsProvider);
|
final artistQuery = ref.watch(metadataPluginSavedArtistsProvider);
|
||||||
final artistQueryNotifier = ref.watch(followedArtistsProvider.notifier);
|
final artistQueryNotifier =
|
||||||
|
ref.watch(metadataPluginSavedArtistsProvider.notifier);
|
||||||
|
|
||||||
final searchText = useState('');
|
final searchText = useState('');
|
||||||
|
|
||||||
@ -43,7 +45,7 @@ class UserArtistsPage extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
return artists
|
return artists
|
||||||
.map((e) => (
|
.map((e) => (
|
||||||
weightedRatio(e.name!, searchText.value),
|
weightedRatio(e.name, searchText.value),
|
||||||
e,
|
e,
|
||||||
))
|
))
|
||||||
.sorted((a, b) => b.$1.compareTo(a.$1))
|
.sorted((a, b) => b.$1.compareTo(a.$1))
|
||||||
@ -54,7 +56,7 @@ class UserArtistsPage extends HookConsumerWidget {
|
|||||||
|
|
||||||
final controller = useScrollController();
|
final controller = useScrollController();
|
||||||
|
|
||||||
if (auth.asData?.value == null) {
|
if (authenticated.asData?.value != true) {
|
||||||
return const AnonymousFallback();
|
return const AnonymousFallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class MetadataPluginArtistAlbumNotifier
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final metadataPluginArtistAlbumsProvider = AsyncNotifierFamilyProvider<
|
final metadataPluginArtistAlbumsProvider = AsyncNotifierProviderFamily<
|
||||||
MetadataPluginArtistAlbumNotifier,
|
MetadataPluginArtistAlbumNotifier,
|
||||||
SpotubePaginationResponseObject<SpotubeSimpleAlbumObject>,
|
SpotubePaginationResponseObject<SpotubeSimpleAlbumObject>,
|
||||||
String>(
|
String>(
|
||||||
|
@ -10,10 +10,12 @@ class MetadataPluginSavedArtistNotifier
|
|||||||
int offset,
|
int offset,
|
||||||
int limit,
|
int limit,
|
||||||
) async {
|
) async {
|
||||||
return await (await metadataPlugin).user.savedArtists(
|
final artists = await (await metadataPlugin).user.savedArtists(
|
||||||
limit: limit,
|
limit: limit,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return artists;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
part of '../spotify.dart';
|
part of '../spotify.dart';
|
||||||
|
|
||||||
final artistWikipediaSummaryProvider = FutureProvider.autoDispose
|
final artistWikipediaSummaryProvider = FutureProvider.autoDispose
|
||||||
.family<Summary?, ArtistSimple>((ref, artist) async {
|
.family<Summary?, SpotubeFullArtistObject>((ref, artist) async {
|
||||||
final query = artist.name!.replaceAll(" ", "_");
|
final query = artist.name.replaceAll(" ", "_");
|
||||||
final res = await wikipedia.pageContent.pageSummaryTitleGet(query);
|
final res = await wikipedia.pageContent.pageSummaryTitleGet(query);
|
||||||
|
|
||||||
if (res?.type != "standard") {
|
if (res?.type != "standard") {
|
||||||
|
@ -7,6 +7,7 @@ import 'package:drift/drift.dart';
|
|||||||
import 'package:spotube/collections/assets.gen.dart';
|
import 'package:spotube/collections/assets.gen.dart';
|
||||||
import 'package:spotube/collections/env.dart';
|
import 'package:spotube/collections/env.dart';
|
||||||
import 'package:spotube/models/database/database.dart';
|
import 'package:spotube/models/database/database.dart';
|
||||||
|
import 'package:spotube/models/metadata/metadata.dart';
|
||||||
import 'package:spotube/provider/authentication/authentication.dart';
|
import 'package:spotube/provider/authentication/authentication.dart';
|
||||||
import 'package:spotube/provider/database/database.dart';
|
import 'package:spotube/provider/database/database.dart';
|
||||||
import 'package:spotube/services/logger/logger.dart';
|
import 'package:spotube/services/logger/logger.dart';
|
||||||
|
Loading…
Reference in New Issue
Block a user