From 5011636d951df3b72cab834a0800fbe8c99589c1 Mon Sep 17 00:00:00 2001 From: shenlong <139912620+shenlong-tanwen@users.noreply.github.com> Date: Tue, 1 Jul 2025 08:03:37 +0530 Subject: [PATCH] refactor: header - bulk select icon (#19652) Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> --- .../widgets/timeline/header.widget.dart | 65 ++++++++----------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/mobile/lib/presentation/widgets/timeline/header.widget.dart b/mobile/lib/presentation/widgets/timeline/header.widget.dart index 43d6b53b3d..c6c10c26c9 100644 --- a/mobile/lib/presentation/widgets/timeline/header.widget.dart +++ b/mobile/lib/presentation/widgets/timeline/header.widget.dart @@ -9,7 +9,7 @@ import 'package:immich_mobile/providers/haptic_feedback.provider.dart'; import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; -class TimelineHeader extends ConsumerWidget { +class TimelineHeader extends StatelessWidget { final Bucket bucket; final HeaderType header; final double height; @@ -36,23 +36,13 @@ class TimelineHeader extends ConsumerWidget { } @override - Widget build(BuildContext context, WidgetRef ref) { + Widget build(BuildContext context) { if (bucket is! TimeBucket || header == HeaderType.none) { return const SizedBox.shrink(); } final date = (bucket as TimeBucket).date; - List bucketAssets; - try { - bucketAssets = ref - .watch(timelineServiceProvider) - .getAssets(assetOffset, bucket.assetCount); - } catch (e) { - bucketAssets = []; - } - - final isAllSelected = ref.watch(bucketSelectionProvider(bucketAssets)); final isMonthHeader = header == HeaderType.month || header == HeaderType.monthAndDay; final isDayHeader = @@ -80,16 +70,8 @@ class TimelineHeader extends ConsumerWidget { const Spacer(), if (header != HeaderType.monthAndDay) _BulkSelectIconButton( - isAllSelected: isAllSelected, - onPressed: () { - ref - .read(multiSelectProvider.notifier) - .toggleBucketSelection( - assetOffset, - bucket.assetCount, - ); - ref.read(hapticFeedbackProvider.notifier).heavyImpact(); - }, + bucket: bucket, + assetOffset: assetOffset, ), ], ), @@ -104,16 +86,8 @@ class TimelineHeader extends ConsumerWidget { ), const Spacer(), _BulkSelectIconButton( - isAllSelected: isAllSelected, - onPressed: () { - ref - .read(multiSelectProvider.notifier) - .toggleBucketSelection( - assetOffset, - bucket.assetCount, - ); - ref.read(hapticFeedbackProvider.notifier).heavyImpact(); - }, + bucket: bucket, + assetOffset: assetOffset, ), ], ), @@ -125,18 +99,35 @@ class TimelineHeader extends ConsumerWidget { } class _BulkSelectIconButton extends ConsumerWidget { - final bool isAllSelected; - final VoidCallback onPressed; + final Bucket bucket; + final int assetOffset; const _BulkSelectIconButton({ - required this.isAllSelected, - required this.onPressed, + required this.bucket, + required this.assetOffset, }); @override Widget build(BuildContext context, WidgetRef ref) { + List bucketAssets; + try { + bucketAssets = ref + .watch(timelineServiceProvider) + .getAssets(assetOffset, bucket.assetCount); + } catch (e) { + bucketAssets = []; + } + + final isAllSelected = ref.watch(bucketSelectionProvider(bucketAssets)); + return IconButton( - onPressed: onPressed, + onPressed: () { + ref.read(multiSelectProvider.notifier).toggleBucketSelection( + assetOffset, + bucket.assetCount, + ); + ref.read(hapticFeedbackProvider.notifier).heavyImpact(); + }, icon: isAllSelected ? Icon( Icons.check_circle_rounded,