aves/lib/widgets/common/grid/sections/fixed/section_layout.dart
Thibault Deckers 2ea6aeb862 minor
2023-03-25 13:07:27 +01:00

41 lines
1.4 KiB
Dart

import 'package:aves/widgets/common/grid/sections/section_layout.dart';
class FixedExtentSectionLayout extends SectionLayout {
final double tileHeight, mainAxisStride;
@override
List<Object?> get props => [sectionKey, firstIndex, lastIndex, minOffset, maxOffset, headerExtent, tileHeight, spacing];
const FixedExtentSectionLayout({
required super.sectionKey,
required super.firstIndex,
required super.lastIndex,
required super.minOffset,
required super.maxOffset,
required super.headerExtent,
required this.tileHeight,
required super.spacing,
required super.builder,
}) : mainAxisStride = tileHeight + spacing;
@override
double indexToLayoutOffset(int index) {
index -= bodyFirstIndex;
if (index < 0) return minOffset;
return bodyMinOffset + index * mainAxisStride;
}
@override
int getMinChildIndexForScrollOffset(double scrollOffset) {
scrollOffset -= bodyMinOffset;
if (mainAxisStride == 0 || !scrollOffset.isFinite || scrollOffset < 0) return firstIndex;
return bodyFirstIndex + scrollOffset ~/ mainAxisStride;
}
@override
int getMaxChildIndexForScrollOffset(double scrollOffset) {
scrollOffset -= bodyMinOffset;
if (mainAxisStride == 0 || !scrollOffset.isFinite || scrollOffset < 0) return firstIndex;
return bodyFirstIndex + (scrollOffset / mainAxisStride).ceil() - 1;
}
}