mirror of
https://github.com/immich-app/immich.git
synced 2025-08-11 09:16:31 -04:00
* chore: bump dart sdk to 3.8 * chore: make build * make pigeon * chore: format files --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
72 lines
2.2 KiB
Dart
72 lines
2.2 KiB
Dart
import 'package:immich_mobile/domain/models/timeline.model.dart';
|
|
import 'package:immich_mobile/presentation/widgets/timeline/fixed/segment.model.dart';
|
|
import 'package:immich_mobile/presentation/widgets/timeline/segment.model.dart';
|
|
import 'package:immich_mobile/presentation/widgets/timeline/segment_builder.dart';
|
|
|
|
class FixedSegmentBuilder extends SegmentBuilder {
|
|
final double tileHeight;
|
|
final int columnCount;
|
|
|
|
const FixedSegmentBuilder({
|
|
required super.buckets,
|
|
required this.tileHeight,
|
|
required this.columnCount,
|
|
super.spacing,
|
|
super.groupBy,
|
|
});
|
|
|
|
List<Segment> generate() {
|
|
final segments = <Segment>[];
|
|
int firstIndex = 0;
|
|
double startOffset = 0;
|
|
int assetIndex = 0;
|
|
DateTime? previousDate;
|
|
|
|
for (int i = 0; i < buckets.length; i++) {
|
|
final bucket = buckets[i];
|
|
|
|
final assetCount = bucket.assetCount;
|
|
final numberOfRows = (assetCount / columnCount).ceil();
|
|
final segmentCount = numberOfRows + 1;
|
|
|
|
final segmentFirstIndex = firstIndex;
|
|
firstIndex += segmentCount;
|
|
final segmentLastIndex = firstIndex - 1;
|
|
|
|
final timelineHeader = switch (groupBy) {
|
|
GroupAssetsBy.month => HeaderType.month,
|
|
GroupAssetsBy.day || GroupAssetsBy.auto =>
|
|
bucket is TimeBucket && bucket.date.month != previousDate?.month ? HeaderType.monthAndDay : HeaderType.day,
|
|
GroupAssetsBy.none => HeaderType.none,
|
|
};
|
|
final headerExtent = SegmentBuilder.headerExtent(timelineHeader);
|
|
|
|
final segmentStartOffset = startOffset;
|
|
startOffset += headerExtent + (tileHeight * numberOfRows) + spacing * (numberOfRows - 1);
|
|
final segmentEndOffset = startOffset;
|
|
|
|
segments.add(
|
|
FixedSegment(
|
|
firstIndex: segmentFirstIndex,
|
|
lastIndex: segmentLastIndex,
|
|
startOffset: segmentStartOffset,
|
|
endOffset: segmentEndOffset,
|
|
firstAssetIndex: assetIndex,
|
|
bucket: bucket,
|
|
tileHeight: tileHeight,
|
|
columnCount: columnCount,
|
|
headerExtent: headerExtent,
|
|
spacing: spacing,
|
|
header: timelineHeader,
|
|
),
|
|
);
|
|
|
|
assetIndex += assetCount;
|
|
if (bucket is TimeBucket) {
|
|
previousDate = bucket.date;
|
|
}
|
|
}
|
|
return segments;
|
|
}
|
|
}
|