songs list tab

This commit is contained in:
austinried
2025-12-06 09:42:53 +09:00
parent 16a79c81cb
commit a4e4c6fa57
6 changed files with 113 additions and 32 deletions

View File

@@ -1,13 +1,18 @@
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:material_symbols_icons/symbols.dart';
import '../../database/query.dart';
import '../../l10n/generated/app_localizations.dart';
import '../state/services.dart';
import '../state/source.dart';
import '../ui/lists/albums_grid.dart';
import '../ui/lists/artists_list.dart';
import '../ui/lists/items.dart';
import '../ui/lists/songs_list.dart';
import '../util/custom_scroll_fix.dart';
const kIconSize = 26.0;
@@ -51,20 +56,7 @@ class LibraryScreen extends HookConsumerWidget {
builder: (context) => CustomScrollProvider(
tabController: tabController,
parent: PrimaryScrollController.of(context),
child: TabBarView(
controller: tabController,
children: LibraryTab.values
.map(
(tab) => TabScrollView(
index: LibraryTab.values.indexOf(tab),
sliver: switch (tab) {
LibraryTab.albums => AlbumsGrid(),
_ => ArtistsList(),
},
),
)
.toList(),
),
child: LibraryTabBarView(tabController: tabController),
),
),
),
@@ -72,6 +64,56 @@ class LibraryScreen extends HookConsumerWidget {
}
}
class LibraryTabBarView extends HookConsumerWidget {
const LibraryTabBarView({
super.key,
required this.tabController,
});
final TabController tabController;
@override
Widget build(BuildContext context, WidgetRef ref) {
final sourceId = ref.watch(sourceIdProvider);
final songsQuery = SongsQuery(
sourceId: sourceId,
sort: IList([
SongsSortingTerm(dir: SortDirection.asc, by: SongsColumn.albumArtist),
SongsSortingTerm(dir: SortDirection.asc, by: SongsColumn.album),
SongsSortingTerm(dir: SortDirection.asc, by: SongsColumn.disc),
SongsSortingTerm(dir: SortDirection.asc, by: SongsColumn.track),
SongsSortingTerm(dir: SortDirection.asc, by: SongsColumn.title),
]),
);
return TabBarView(
controller: tabController,
children: LibraryTab.values
.map(
(tab) => TabScrollView(
index: LibraryTab.values.indexOf(tab),
sliver: switch (tab) {
LibraryTab.albums => AlbumsGrid(),
LibraryTab.artists => ArtistsList(),
LibraryTab.songs => SongsList(
query: songsQuery,
itemBuilder: (context, item, index) => SongListTile(
song: item.song,
coverArt: item.albumCoverArt,
showLeading: true,
onTap: () {},
),
),
_ => ArtistsList(),
},
),
)
.toList(),
);
}
}
class LibraryTabsHeader extends HookConsumerWidget {
const LibraryTabsHeader({
super.key,