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));
if (columnCount > 0) {
final double usableCrossAxisExtent = math.max(
0.0,
constraints.crossAxisExtent - crossAxisSpacing * (columnCount - 1),
);
final double childCrossAxisExtent = usableCrossAxisExtent / columnCount;
final double childMainAxisExtent = mainAxisExtent ?? childCrossAxisExtent / childAspectRatio;
return SliverGridRegularTileLayout(
crossAxisCount: columnCount,
mainAxisStride: childMainAxisExtent + mainAxisSpacing,
crossAxisStride: childCrossAxisExtent + crossAxisSpacing,
childMainAxisExtent: childMainAxisExtent,
childCrossAxisExtent: childCrossAxisExtent,
reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection),
);
} else {
int crossAxisCount = (constraints.crossAxisExtent + crossAxisSpacing) ~/ (crossAxisExtent + crossAxisSpacing);
crossAxisCount = crossAxisCount.GE(1);
double leftSize = (constraints.crossAxisExtent + crossAxisSpacing) - (crossAxisExtent + crossAxisSpacing) * crossAxisCount;
if (leftSize > 0 && (leftSize - crossAxisSpacing) >= crossAxisExtent * (1 - flexPercent)) {
crossAxisCount += 1;
}
final double usableCrossAxisExtent = (constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1)).GE(0);
final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
final double childMainAxisExtent = mainAxisExtent ?? childCrossAxisExtent / childAspectRatio;
return SliverGridRegularTileLayout(
crossAxisCount: crossAxisCount,
mainAxisStride: childMainAxisExtent + mainAxisSpacing,
crossAxisStride: childCrossAxisExtent + crossAxisSpacing,
childMainAxisExtent: childMainAxisExtent,
childCrossAxisExtent: childCrossAxisExtent,
reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection),
);
}
}