layoutFit method

void layoutFit(
  1. Rect rect, {
  2. BoxFit fit = BoxFit.contain,
  3. Alignment alignment = Alignment.center,
})

Lays out, positions, and scales the child so that it fits in rect provided a fit and alignment.

Implementation

void layoutFit(
  Rect rect, {
  BoxFit fit = BoxFit.contain,
  Alignment alignment = Alignment.center,
}) {
  final childSize = layout(const BoxConstraints());
  final sizes = applyBoxFit(fit, childSize, rect.size);
  final scaleX = sizes.destination.width / sizes.source.width;
  final scaleY = sizes.destination.height / sizes.source.height;
  final sourceRect =
      alignment.inscribe(sizes.source, Offset.zero & childSize);
  final destinationRect = alignment.inscribe(sizes.destination, rect);

  setTransform(
    Matrix4.translationValues(destinationRect.left, destinationRect.top, 0.0)
      ..scale(scaleX, scaleY, 1.0)
      ..translate(-sourceRect.left, -sourceRect.top),
  );
}