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