chore: fix pagination for liked tracks and saved albums not working

This commit is contained in:
Kingkor Roy Tirtho 2025-09-05 10:50:14 +06:00
parent 005355e267
commit 345c6ac714
4 changed files with 29 additions and 32 deletions

View File

@ -99,7 +99,7 @@ class UserAlbumsPage extends HookConsumerWidget {
features: const [
InputFeature.leading(Icon(SpotubeIcons.filter))
],
placeholder: Text(context.l10n.filter_artist),
placeholder: Text(context.l10n.filter_albums),
),
),
),
@ -121,7 +121,7 @@ class UserAlbumsPage extends HookConsumerWidget {
color: Theme.of(context).colorScheme.primary,
),
Text(
context.l10n.not_following_artists,
context.l10n.no_favorite_albums_yet,
textAlign: TextAlign.center,
).muted().small()
],

View File

@ -8,6 +8,7 @@ import 'package:spotube/models/metadata/metadata.dart';
import 'package:spotube/pages/playlist/playlist.dart';
import 'package:spotube/provider/metadata_plugin/library/tracks.dart';
import 'package:auto_route/auto_route.dart';
import 'package:spotube/provider/metadata_plugin/utils/common.dart';
@RoutePage()
class LikedPlaylistPage extends HookConsumerWidget {
@ -22,6 +23,8 @@ class LikedPlaylistPage extends HookConsumerWidget {
@override
Widget build(BuildContext context, ref) {
final likedTracks = ref.watch(metadataPluginSavedTracksProvider);
final likedTracksNotifier =
ref.watch(metadataPluginSavedTracksProvider.notifier);
final tracks = likedTracks.asData?.value.items ?? [];
return material.RefreshIndicator.adaptive(
@ -33,11 +36,13 @@ class LikedPlaylistPage extends HookConsumerWidget {
collection: playlist,
image: Assets.images.likedTracks.path,
pagination: PaginationProps(
hasNextPage: false,
isLoading: likedTracks.isLoading,
onFetchMore: () {},
hasNextPage: likedTracks.asData?.value.hasMore ?? false,
isLoading: likedTracks.isLoadingNextPage && !likedTracks.isLoading,
onFetchMore: () async {
await likedTracksNotifier.fetchMore();
},
onFetchAll: () async {
return tracks.toList();
return await likedTracksNotifier.fetchAll();
},
onRefresh: () async {
ref.invalidate(metadataPluginSavedTracksProvider);

View File

@ -14,8 +14,6 @@ abstract class FamilyPaginatedAsyncNotifier<K, A>
state = AsyncLoadingNext(state.asData!.value);
state = await AsyncValue.guard(
() async {
final newState = await fetch(
state.value!.nextOffset!,
state.value!.limit,
@ -25,9 +23,7 @@ abstract class FamilyPaginatedAsyncNotifier<K, A>
state.value!.items.isEmpty ? <K>[] : state.value!.items.cast<K>();
final items = newState.items.isEmpty ? <K>[] : newState.items.cast<K>();
return newState.copyWith(items: <K>[...oldItems, ...items]);
},
);
state = AsyncData(newState.copyWith(items: <K>[...oldItems, ...items]));
}
Future<List<K>> fetchAll() async {

View File

@ -16,8 +16,6 @@ mixin PaginatedAsyncNotifierMixin<K>
state = AsyncLoadingNext(state.asData!.value);
state = await AsyncValue.guard(
() async {
final newState = await fetch(
state.value!.nextOffset!,
state.value!.limit,
@ -27,9 +25,7 @@ mixin PaginatedAsyncNotifierMixin<K>
state.value!.items.isEmpty ? <K>[] : state.value!.items.cast<K>();
final items = newState.items.isEmpty ? <K>[] : newState.items.cast<K>();
return newState.copyWith(items: <K>[...oldItems, ...items]);
},
);
state = AsyncData(newState.copyWith(items: <K>[...oldItems, ...items]));
}
Future<List<K>> fetchAll() async {