This commit is contained in:
Alex Tran 2024-09-07 21:51:46 -05:00
parent 9266197cd2
commit 27d390a756
No known key found for this signature in database
3 changed files with 32 additions and 7 deletions

View File

@ -1,9 +1,9 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:immich_mobile/providers/album/albumv2.provider.dart';
import 'package:immich_mobile/providers/search/people.provider.dart';
import 'package:immich_mobile/providers/server_info.provider.dart';
@ -134,17 +134,29 @@ class PeopleCollectionCard extends ConsumerWidget {
}
}
class AlbumsCollectionCard extends ConsumerWidget {
class AlbumsCollectionCard extends HookConsumerWidget {
final bool isLocal;
const AlbumsCollectionCard({super.key, this.isLocal = false});
@override
Widget build(BuildContext context, WidgetRef ref) {
final albums = isLocal
? ref.watch(albumProviderV2).where((album) => album.isLocal)
: ref.watch(albumProviderV2).where((album) => album.isRemote);
final albums = useState([]);
final size = MediaQuery.of(context).size.width * 0.5 - 20;
useEffect(
() {
Future.microtask(() async {
albums.value = isLocal
? await ref.read(albumProviderV2.notifier).getLocalAlbums()
: await ref.read(albumProviderV2.notifier).getRemoteAlbums();
});
return null;
},
[],
);
return GestureDetector(
onTap: () => context.pushRoute(
isLocal
@ -167,7 +179,7 @@ class AlbumsCollectionCard extends ConsumerWidget {
crossAxisSpacing: 8,
mainAxisSpacing: 8,
physics: const NeverScrollableScrollPhysics(),
children: albums.take(4).map((album) {
children: albums.value.take(4).map((album) {
return AlbumThumbnailCard(
album: album,
showTitle: false,

View File

@ -26,7 +26,7 @@ class AlbumNotifierV2 extends StateNotifier<List<Album>> {
final Isar db;
late final StreamSubscription<List<Album>> _streamSub;
Future<void> getAllAlbums() {
Future<void> refreshAlbums() {
return Future.wait([
_albumService.refreshDeviceAlbums(),
_albumService.refreshRemoteAlbums(isShared: true),
@ -103,6 +103,14 @@ class AlbumNotifierV2 extends StateNotifier<List<Album>> {
}
}
Future<List<Album>> getRemoteAlbums() {
return db.albums.filter().remoteIdIsNotNull().findAll();
}
Future<List<Album>> getLocalAlbums() {
return db.albums.filter().not().remoteIdIsNotNull().findAll();
}
@override
void dispose() {
_streamSub.cancel();

View File

@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart';
import 'package:flutter/foundation.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:immich_mobile/providers/album/albumv2.provider.dart';
import 'package:immich_mobile/providers/memory.provider.dart';
import 'package:immich_mobile/providers/search/people.provider.dart';
@ -50,6 +51,10 @@ class TabNavigationObserver extends AutoRouterObserver {
ref.read(albumProvider.notifier).getAllAlbums();
}
if (route.name == 'CollectionsRoute') {
ref.read(albumProviderV2.notifier).refreshAlbums();
}
if (route.name == 'HomeRoute') {
ref.invalidate(memoryFutureProvider);
Future(() => ref.read(assetProvider.notifier).getAllAsset());