getLayout method

  1. @override
SliverGridLayout getLayout(
  1. SliverConstraints constraints
)
override

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),
  );
}