Skip to content

Commit 581b241

Browse files
committed
chore: add not found for empty lists
1 parent 24a2294 commit 581b241

File tree

5 files changed

+62
-36
lines changed

5 files changed

+62
-36
lines changed

lib/components/library/user_albums.dart

+32-24
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:spotube/collections/fake.dart';
99

1010
import 'package:spotube/collections/spotube_icons.dart';
1111
import 'package:spotube/components/album/album_card.dart';
12+
import 'package:spotube/components/shared/fallbacks/not_found.dart';
1213
import 'package:spotube/components/shared/inter_scrollbar/inter_scrollbar.dart';
1314
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
1415
import 'package:spotube/components/shared/waypoint.dart';
@@ -84,30 +85,37 @@ class UserAlbums extends HookConsumerWidget {
8485
padding: const EdgeInsets.all(8.0),
8586
controller: controller,
8687
child: Skeletonizer(
87-
enabled: albums.isEmpty,
88-
child: Wrap(
89-
runSpacing: 20,
90-
alignment: WrapAlignment.center,
91-
runAlignment: WrapAlignment.center,
92-
crossAxisAlignment: WrapCrossAlignment.center,
93-
children: [
94-
if (albums.isEmpty)
95-
...List.generate(
96-
10,
97-
(index) => AlbumCard(FakeData.album),
98-
),
99-
for (final album in albums)
100-
AlbumCard(
101-
TypeConversionUtils.simpleAlbum_X_Album(album),
102-
),
103-
if (albums.isNotEmpty && albumsQuery.hasNextPage)
104-
Waypoint(
105-
controller: controller,
106-
isGrid: true,
107-
onTouchEdge: albumsQuery.fetchNext,
108-
child: AlbumCard(FakeData.album),
109-
)
110-
],
88+
enabled: albums.isEmpty && albumsQuery.isLoadingNextPage,
89+
child: Center(
90+
child: Wrap(
91+
runSpacing: 20,
92+
alignment: WrapAlignment.center,
93+
runAlignment: WrapAlignment.center,
94+
crossAxisAlignment: WrapCrossAlignment.center,
95+
children: [
96+
if (albums.isEmpty && albumsQuery.isLoadingNextPage)
97+
...List.generate(
98+
10,
99+
(index) => AlbumCard(FakeData.album),
100+
)
101+
else if (albums.isEmpty)
102+
const Row(
103+
mainAxisAlignment: MainAxisAlignment.center,
104+
children: [NotFound()],
105+
),
106+
for (final album in albums)
107+
AlbumCard(
108+
TypeConversionUtils.simpleAlbum_X_Album(album),
109+
),
110+
if (albums.isNotEmpty && albumsQuery.hasNextPage)
111+
Waypoint(
112+
controller: controller,
113+
isGrid: true,
114+
onTouchEdge: albumsQuery.fetchNext,
115+
child: AlbumCard(FakeData.album),
116+
)
117+
],
118+
),
111119
),
112120
),
113121
),

lib/components/library/user_artists.dart

+15-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:spotube/collections/fake.dart';
99
import 'package:spotube/collections/spotube_icons.dart';
1010
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
1111
import 'package:spotube/components/artist/artist_card.dart';
12+
import 'package:spotube/components/shared/fallbacks/not_found.dart';
1213
import 'package:spotube/components/shared/inter_scrollbar/inter_scrollbar.dart';
1314
import 'package:spotube/extensions/context.dart';
1415
import 'package:spotube/provider/authentication_provider.dart';
@@ -97,10 +98,20 @@ class UserArtists extends HookConsumerWidget {
9798
children: artistQuery.isLoading
9899
? List.generate(
99100
10, (index) => ArtistCard(FakeData.artist))
100-
: filteredArtists
101-
.mapIndexed(
102-
(index, artist) => ArtistCard(artist))
103-
.toList(),
101+
: filteredArtists.isEmpty
102+
? [
103+
const Row(
104+
mainAxisAlignment:
105+
MainAxisAlignment.center,
106+
children: [
107+
NotFound(),
108+
],
109+
)
110+
]
111+
: filteredArtists
112+
.mapIndexed((index, artist) =>
113+
ArtistCard(artist))
114+
.toList(),
104115
),
105116
),
106117
),

lib/components/library/user_local_tracks.dart

+10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'package:spotify/spotify.dart';
1717
import 'package:spotube/collections/fake.dart';
1818
import 'package:spotube/collections/spotube_icons.dart';
1919
import 'package:spotube/components/shared/expandable_search/expandable_search.dart';
20+
import 'package:spotube/components/shared/fallbacks/not_found.dart';
2021
import 'package:spotube/components/shared/inter_scrollbar/inter_scrollbar.dart';
2122
import 'package:spotube/components/shared/sort_tracks_dropdown.dart';
2223
import 'package:spotube/components/shared/track_tile/track_tile.dart';
@@ -255,6 +256,15 @@ class UserLocalTracks extends HookConsumerWidget {
255256
.toList();
256257
}, [searchController.text, sortedTracks]);
257258

259+
if (!trackSnapshot.isLoading && filteredTracks.isEmpty) {
260+
return const Expanded(
261+
child: Row(
262+
mainAxisAlignment: MainAxisAlignment.center,
263+
children: [NotFound()],
264+
),
265+
);
266+
}
267+
258268
return Expanded(
259269
child: RefreshIndicator(
260270
onRefresh: () async {

lib/components/shared/tracks_view/sections/body/track_view_body.dart

+4-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:skeletonizer/skeletonizer.dart';
88
import 'package:spotify/spotify.dart';
99
import 'package:spotube/collections/fake.dart';
1010
import 'package:spotube/components/shared/expandable_search/expandable_search.dart';
11+
import 'package:spotube/components/shared/fallbacks/not_found.dart';
1112
import 'package:spotube/components/shared/track_tile/track_tile.dart';
1213
import 'package:spotube/components/shared/tracks_view/sections/body/track_view_body_headers.dart';
1314
import 'package:spotube/components/shared/tracks_view/sections/body/use_is_user_playlist.dart';
@@ -92,14 +93,9 @@ class TrackViewBodySection extends HookConsumerWidget {
9293
index: 0,
9394
),
9495
),
95-
emptyBuilder: (context) => Skeletonizer(
96-
enabled: true,
97-
child: Column(
98-
children: List.generate(
99-
10,
100-
(index) => TrackTile(track: FakeData.track, index: index),
101-
),
102-
),
96+
emptyBuilder: (context) => const Row(
97+
mainAxisAlignment: MainAxisAlignment.center,
98+
children: [NotFound()],
10399
),
104100
itemBuilder: (context, index) {
105101
final track = tracks[index];

lib/themes/theme.dart

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ ThemeData theme(Color seed, Brightness brightness, bool isAmoled) {
5252
),
5353
sliderTheme: SliderThemeData(overlayShape: SliderComponentShape.noOverlay),
5454
searchBarTheme: SearchBarThemeData(
55+
textStyle: const MaterialStatePropertyAll(TextStyle(fontSize: 15)),
5556
constraints: const BoxConstraints(maxWidth: double.infinity),
5657
padding: const MaterialStatePropertyAll(EdgeInsets.all(8)),
5758
backgroundColor: MaterialStatePropertyAll(

0 commit comments

Comments
 (0)