mirror of
https://github.com/austinried/subtracks.git
synced 2026-02-10 23:02:43 +01:00
active source switching and reactivity
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import 'package:drift/drift.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:infinite_scroll_pagination/infinite_scroll_pagination.dart';
|
||||
@@ -23,15 +23,17 @@ class AlbumsGrid extends HookConsumerWidget {
|
||||
final controller = usePagingController<int, Album>(
|
||||
getNextPageKey: (state) =>
|
||||
state.lastPageIsEmpty ? null : state.nextIntPageKey,
|
||||
fetchPage: (pageKey) async {
|
||||
final query = db.albums.select()
|
||||
..where((f) => f.sourceId.equals(sourceId))
|
||||
..limit(kPageSize, offset: (pageKey - 1) * kPageSize);
|
||||
|
||||
return await query.get();
|
||||
},
|
||||
fetchPage: (pageKey) => db.libraryDao.listAlbums(
|
||||
limit: kPageSize,
|
||||
offset: (pageKey - 1) * kPageSize,
|
||||
),
|
||||
);
|
||||
|
||||
useEffect(() {
|
||||
controller.refresh();
|
||||
return;
|
||||
}, [sourceId]);
|
||||
|
||||
return PagingListener(
|
||||
controller: controller,
|
||||
builder: (context, state, fetchNextPage) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:drift/drift.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:infinite_scroll_pagination/infinite_scroll_pagination.dart';
|
||||
@@ -25,36 +25,17 @@ class ArtistsList extends HookConsumerWidget {
|
||||
final controller = usePagingController<int, _ArtistItem>(
|
||||
getNextPageKey: (state) =>
|
||||
state.lastPageIsEmpty ? null : state.nextIntPageKey,
|
||||
fetchPage: (pageKey) async {
|
||||
final albumCount = db.albums.id.count();
|
||||
|
||||
final query =
|
||||
db.artists.select().join([
|
||||
leftOuterJoin(
|
||||
db.albums,
|
||||
db.albums.artistId.equalsExp(db.artists.id),
|
||||
),
|
||||
])
|
||||
..addColumns([albumCount])
|
||||
..where(
|
||||
db.artists.sourceId.equals(sourceId) &
|
||||
db.albums.sourceId.equals(sourceId),
|
||||
)
|
||||
..groupBy([db.artists.sourceId, db.artists.id])
|
||||
..orderBy([OrderingTerm.asc(db.artists.name)])
|
||||
..limit(kPageSize, offset: (pageKey - 1) * kPageSize);
|
||||
|
||||
return (await query.get())
|
||||
.map(
|
||||
(row) => (
|
||||
artist: row.readTable(db.artists),
|
||||
albumCount: row.read(albumCount),
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
},
|
||||
fetchPage: (pageKey) => db.libraryDao.listArtists(
|
||||
limit: kPageSize,
|
||||
offset: (pageKey - 1) * kPageSize,
|
||||
),
|
||||
);
|
||||
|
||||
useEffect(() {
|
||||
controller.refresh();
|
||||
return;
|
||||
}, [sourceId]);
|
||||
|
||||
return PagingListener(
|
||||
controller: controller,
|
||||
builder: (context, state, fetchNextPage) {
|
||||
|
||||
Reference in New Issue
Block a user