refactor(mobile): render list (#16239)

* refactor(mobile): trash provider

* refactor(mobile): trash provider

* pr feedback

* archive timeline

* favorite

* album

* trash timeline

* all videos timeline

* refactor

* refactor: home timeline and partner timeline

* update analysis option
This commit is contained in:
Alex
2025-02-21 09:01:46 -06:00
committed by GitHub
parent 616905211d
commit 5acf6868b7
24 changed files with 284 additions and 196 deletions
+2 -1
View File
@@ -14,6 +14,7 @@ import 'package:immich_mobile/pages/album/album_shared_user_icons.dart';
import 'package:immich_mobile/pages/album/album_title.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:immich_mobile/providers/album/current_album.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/utils/immich_loading_overlay.dart';
import 'package:immich_mobile/providers/multiselect.provider.dart';
import 'package:immich_mobile/providers/auth.provider.dart';
@@ -104,7 +105,7 @@ class AlbumViewer extends HookConsumerWidget {
children: [
MultiselectGrid(
key: const ValueKey("albumViewerMultiselectGrid"),
renderListProvider: albumRenderlistProvider(album.id),
renderListProvider: albumTimelineProvider(album.id),
topWidget: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
+4 -4
View File
@@ -2,8 +2,8 @@ import 'package:auto_route/auto_route.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/providers/archive.provider.dart';
import 'package:immich_mobile/providers/multiselect.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
@RoutePage()
@@ -13,8 +13,8 @@ class ArchivePage extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
AppBar buildAppBar() {
final archivedAssets = ref.watch(archiveProvider);
final count = archivedAssets.value?.totalAssets.toString() ?? "?";
final archiveRenderList = ref.watch(archiveTimelineProvider);
final count = archiveRenderList.value?.totalAssets.toString() ?? "?";
return AppBar(
leading: IconButton(
onPressed: () => context.maybePop(),
@@ -31,7 +31,7 @@ class ArchivePage extends HookConsumerWidget {
return Scaffold(
appBar: ref.watch(multiselectProvider) ? null : buildAppBar(),
body: MultiselectGrid(
renderListProvider: archiveProvider,
renderListProvider: archiveTimelineProvider,
unarchive: true,
archiveEnabled: true,
deleteEnabled: true,
+2 -2
View File
@@ -2,8 +2,8 @@ import 'package:auto_route/auto_route.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/providers/favorite.provider.dart';
import 'package:immich_mobile/providers/multiselect.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
@RoutePage()
@@ -29,7 +29,7 @@ class FavoritesPage extends HookConsumerWidget {
return Scaffold(
appBar: ref.watch(multiselectProvider) ? null : buildAppBar(),
body: MultiselectGrid(
renderListProvider: favoriteAssetsProvider,
renderListProvider: favoriteTimelineProvider,
favoriteEnabled: true,
editEnabled: true,
unfavorite: true,
@@ -7,6 +7,7 @@ import 'package:immich_mobile/providers/multiselect.provider.dart';
import 'package:immich_mobile/providers/partner.provider.dart';
import 'package:immich_mobile/entities/user.entity.dart';
import 'package:immich_mobile/providers/asset.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
@@ -110,7 +111,7 @@ class PartnerDetailPage extends HookConsumerWidget {
),
),
),
renderListProvider: assetsProvider(partner.isarId),
renderListProvider: singleUserTimelineProvider(partner.isarId),
onRefresh: () => ref.read(assetProvider.notifier).getAllAsset(),
deleteEnabled: false,
favoriteEnabled: false,
+4 -3
View File
@@ -7,6 +7,7 @@ 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/asset.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/immich_asset_grid.dart';
import 'package:immich_mobile/widgets/asset_grid/delete_dialog.dart';
import 'package:immich_mobile/providers/trash.provider.dart';
@@ -22,7 +23,7 @@ class TrashPage extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final trashedAssets = ref.watch(trashedAssetsProvider);
final trashRenderList = ref.watch(trashTimelineProvider);
final trashDays =
ref.watch(serverInfoProvider.select((v) => v.serverConfig.trashDays));
final selectionEnabledHook = useState(false);
@@ -234,11 +235,11 @@ class TrashPage extends HookConsumerWidget {
}
return Scaffold(
appBar: trashedAssets.maybeWhen(
appBar: trashRenderList.maybeWhen(
orElse: () => buildAppBar("?"),
data: (data) => buildAppBar(data.totalAssets.toString()),
),
body: trashedAssets.widgetWhen(
body: trashRenderList.widgetWhen(
onData: (data) => data.isEmpty
? Center(
child: Text('trash_page_no_assets'.tr()),
+3 -2
View File
@@ -8,6 +8,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/providers/album/album.provider.dart';
import 'package:immich_mobile/providers/multiselect.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/memories/memory_lane.dart';
import 'package:immich_mobile/providers/asset.provider.dart';
import 'package:immich_mobile/providers/server_info.provider.dart';
@@ -108,8 +109,8 @@ class PhotosPage extends HookConsumerWidget {
? const MemoryLane()
: const SizedBox(),
renderListProvider: timelineUsers.length > 1
? multiUserAssetsProvider(timelineUsers)
: assetsProvider(currentUser?.isarId),
? multiUsersTimelineProvider(timelineUsers)
: singleUserTimelineProvider(currentUser!.isarId),
buildLoadingIndicator: buildLoadingIndicator,
onRefresh: refreshAssets,
stackEnabled: true,
+2 -2
View File
@@ -2,7 +2,7 @@ import 'package:auto_route/auto_route.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/providers/search/all_video_assets.provider.dart';
import 'package:immich_mobile/providers/timeline.provider.dart';
import 'package:immich_mobile/widgets/asset_grid/multiselect_grid.dart';
@RoutePage()
@@ -19,7 +19,7 @@ class AllVideosPage extends HookConsumerWidget {
icon: const Icon(Icons.arrow_back_ios_rounded),
),
),
body: MultiselectGrid(renderListProvider: allVideoAssetsProvider),
body: MultiselectGrid(renderListProvider: allVideosTimelineProvider),
);
}
}