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

@@ -66,19 +66,25 @@ class SongListTile extends StatelessWidget {
const SongListTile({
super.key,
required this.song,
this.coverArt,
this.showLeading = false,
this.onTap,
});
final Song song;
final String? coverArt;
final bool showLeading;
final void Function()? onTap;
@override
Widget build(BuildContext context) {
return ListTile(
// leading: CoverArtImage(
// coverArt: song.coverArt,
// thumbnail: true,
// ),
leading: showLeading
? CoverArtImage(
coverArt: coverArt,
thumbnail: true,
)
: null,
title: Text(song.title),
subtitle: Text(song.artist ?? ''),
onTap: onTap,

View File

@@ -2,12 +2,11 @@ import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import '../../../database/dao/library_dao.dart';
import '../../../database/query.dart';
import '../../../sources/models.dart';
import '../../hooks/use_on_source.dart';
import '../../hooks/use_paging_controller.dart';
import '../../state/database.dart';
import 'items.dart';
const kPageSize = 30;
@@ -15,14 +14,17 @@ class SongsList extends HookConsumerWidget {
const SongsList({
super.key,
required this.query,
required this.itemBuilder,
});
final SongsQuery query;
final Widget Function(BuildContext context, SongListItem item, int index)
itemBuilder;
@override
Widget build(BuildContext context, WidgetRef ref) {
final db = ref.watch(databaseProvider);
final controller = usePagingController<int, Song>(
final controller = usePagingController<int, SongListItem>(
getNextPageKey: (state) =>
state.lastPageIsEmpty ? null : state.nextIntPageKey,
fetchPage: (pageKey) => db.libraryDao.listSongs(
@@ -42,13 +44,8 @@ class SongsList extends HookConsumerWidget {
return PagedSliverList(
state: state,
fetchNextPage: fetchNextPage,
builderDelegate: PagedChildBuilderDelegate<Song>(
itemBuilder: (context, item, index) {
return SongListTile(
song: item,
onTap: () async {},
);
},
builderDelegate: PagedChildBuilderDelegate<SongListItem>(
itemBuilder: itemBuilder,
),
);
},