Skip to content

Commit

Permalink
feat: shimmer when loading album
Browse files Browse the repository at this point in the history
  • Loading branch information
Yesterday17 committed Aug 4, 2024
1 parent cd6ff4d commit 4b5c45d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 50 deletions.
30 changes: 19 additions & 11 deletions lib/ui/page/album.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,35 @@ import 'package:annix/services/playback/playback.dart';
import 'package:annix/ui/widgets/artist_text.dart';
import 'package:annix/ui/widgets/buttons/favorite_button.dart';
import 'package:annix/ui/widgets/cover.dart';
import 'package:annix/ui/widgets/utils/display_or_lazy_screen.dart';
import 'package:annix/ui/widgets/shimmer/shimmer_playlist_page.dart';
import 'package:annix/utils/context_extension.dart';
import 'package:flutter/material.dart';
import 'package:annix/i18n/strings.g.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

class LazyAlbumPage extends ConsumerWidget {
final albumFamily = FutureProvider.family<Album, String>((ref, albumId) {
final metadata = ref.read(metadataProvider);
return metadata.getAlbum(albumId: albumId).then(
(final album) {
if (album == null) throw 'Album not found';
return album;
},
);
});

class LoadingAlbumPage extends ConsumerWidget {
final String albumId;

const LazyAlbumPage({required this.albumId, super.key});
const LoadingAlbumPage({super.key, required this.albumId});

@override
Widget build(final BuildContext context, final WidgetRef ref) {
return DisplayOrLazyLoadScreen<Album>(
future: ref.read(metadataProvider).getAlbum(albumId: albumId).then(
(final album) {
if (album == null) throw 'Album not found';
return album;
},
),
builder: (final album) => AlbumPage(album: album),
final playlist = ref.watch(albumFamily(albumId));

return playlist.when(
data: (album) => AlbumPage(album: album),
error: (error, stacktrace) => const Text('Error'),
loading: () => const ShimmerPlaylistPage(),
);
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/route/delegate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ class AnnixRouterDelegate extends RouterDelegate<List<RouteSettings>>
if (routeSettings.arguments is String) {
// albumId
final albumId = routeSettings.arguments as String;
child = LazyAlbumPage(albumId: albumId);
child = LoadingAlbumPage(albumId: albumId);
ref.read(themeProvider).pushTemporaryTheme(albumId);
} else {
final album = routeSettings.arguments as Album;
Expand Down
38 changes: 0 additions & 38 deletions lib/ui/widgets/utils/display_or_lazy_screen.dart

This file was deleted.

0 comments on commit 4b5c45d

Please sign in to comment.