getLayout method
Returns information about the size and position of the tiles in the grid.
Implementation
@override
SliverGridLayout getLayout(SliverConstraints constraints) {
assert(_debugAssertIsValid(constraints.crossAxisExtent));
// The maximum number of items that can fit on one row.
int crossAxisCount;
// Item height with padding.
double mainAxisStride;
// Item width with padding.
double crossAxisStride;
// Item height.
double childMainAxisExtent;
// Item width.
double? childCrossAxisExtent;
// Switch between item sizing behaviors.
if (crossAxisExtent != null) {
crossAxisCount =
(constraints.crossAxisExtent / (crossAxisExtent! + crossAxisSpacing))
.floor();
childCrossAxisExtent = crossAxisExtent;
childMainAxisExtent = childCrossAxisExtent! / childAspectRatio;
mainAxisStride = childMainAxisExtent + mainAxisSpacing;
crossAxisStride = childCrossAxisExtent + crossAxisSpacing;
} else if (maxCrossAxisExtent != null) {
crossAxisCount = (constraints.crossAxisExtent /
(maxCrossAxisExtent! + crossAxisSpacing))
.ceil();
final double usableCrossAxisExtent =
constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1);
childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
mainAxisStride = childMainAxisExtent + mainAxisSpacing;
crossAxisStride = childCrossAxisExtent + crossAxisSpacing;
} else {
crossAxisCount = (constraints.crossAxisExtent /
(minCrossAxisExtent! + crossAxisSpacing))
.floor();
final double usableCrossAxisExtent =
constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1);
childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
mainAxisStride = childMainAxisExtent + mainAxisSpacing;
crossAxisStride = childCrossAxisExtent + crossAxisSpacing;
}
return SliverGridRegularTileLayout(
crossAxisCount: crossAxisCount,
mainAxisStride: mainAxisStride,
crossAxisStride: crossAxisStride,
childMainAxisExtent: childMainAxisExtent,
childCrossAxisExtent: childCrossAxisExtent,
reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection),
);
}