mirror of
https://github.com/immich-app/immich.git
synced 2025-07-09 03:04:16 -04:00
refactor: header - bulk select icon (#19652)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
parent
3f330c6476
commit
5011636d95
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user