refactor: header - bulk select icon (#19652)

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong 2025-07-01 08:03:37 +05:30 committed by GitHub
parent 3f330c6476
commit 5011636d95
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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/infrastructure/timeline.provider.dart';
import 'package:immich_mobile/providers/timeline/multiselect.provider.dart'; import 'package:immich_mobile/providers/timeline/multiselect.provider.dart';
class TimelineHeader extends ConsumerWidget { class TimelineHeader extends StatelessWidget {
final Bucket bucket; final Bucket bucket;
final HeaderType header; final HeaderType header;
final double height; final double height;
@ -36,23 +36,13 @@ class TimelineHeader extends ConsumerWidget {
} }
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context) {
if (bucket is! TimeBucket || header == HeaderType.none) { if (bucket is! TimeBucket || header == HeaderType.none) {
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
final date = (bucket as TimeBucket).date; final date = (bucket as TimeBucket).date;
List<BaseAsset> bucketAssets;
try {
bucketAssets = ref
.watch(timelineServiceProvider)
.getAssets(assetOffset, bucket.assetCount);
} catch (e) {
bucketAssets = <BaseAsset>[];
}
final isAllSelected = ref.watch(bucketSelectionProvider(bucketAssets));
final isMonthHeader = final isMonthHeader =
header == HeaderType.month || header == HeaderType.monthAndDay; header == HeaderType.month || header == HeaderType.monthAndDay;
final isDayHeader = final isDayHeader =
@ -80,16 +70,8 @@ class TimelineHeader extends ConsumerWidget {
const Spacer(), const Spacer(),
if (header != HeaderType.monthAndDay) if (header != HeaderType.monthAndDay)
_BulkSelectIconButton( _BulkSelectIconButton(
isAllSelected: isAllSelected, bucket: bucket,
onPressed: () { assetOffset: assetOffset,
ref
.read(multiSelectProvider.notifier)
.toggleBucketSelection(
assetOffset,
bucket.assetCount,
);
ref.read(hapticFeedbackProvider.notifier).heavyImpact();
},
), ),
], ],
), ),
@ -104,16 +86,8 @@ class TimelineHeader extends ConsumerWidget {
), ),
const Spacer(), const Spacer(),
_BulkSelectIconButton( _BulkSelectIconButton(
isAllSelected: isAllSelected, bucket: bucket,
onPressed: () { assetOffset: assetOffset,
ref
.read(multiSelectProvider.notifier)
.toggleBucketSelection(
assetOffset,
bucket.assetCount,
);
ref.read(hapticFeedbackProvider.notifier).heavyImpact();
},
), ),
], ],
), ),
@ -125,18 +99,35 @@ class TimelineHeader extends ConsumerWidget {
} }
class _BulkSelectIconButton extends ConsumerWidget { class _BulkSelectIconButton extends ConsumerWidget {
final bool isAllSelected; final Bucket bucket;
final VoidCallback onPressed; final int assetOffset;
const _BulkSelectIconButton({ const _BulkSelectIconButton({
required this.isAllSelected, required this.bucket,
required this.onPressed, required this.assetOffset,
}); });
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
List<BaseAsset> bucketAssets;
try {
bucketAssets = ref
.watch(timelineServiceProvider)
.getAssets(assetOffset, bucket.assetCount);
} catch (e) {
bucketAssets = <BaseAsset>[];
}
final isAllSelected = ref.watch(bucketSelectionProvider(bucketAssets));
return IconButton( return IconButton(
onPressed: onPressed, onPressed: () {
ref.read(multiSelectProvider.notifier).toggleBucketSelection(
assetOffset,
bucket.assetCount,
);
ref.read(hapticFeedbackProvider.notifier).heavyImpact();
},
icon: isAllSelected icon: isAllSelected
? Icon( ? Icon(
Icons.check_circle_rounded, Icons.check_circle_rounded,