isWidthStretch property

  1. @override
bool get isWidthStretch
override

Implementation

@override
bool get isWidthStretch {
  RenderStyle renderStyle = this;
  CSSRenderStyle? parentRenderStyle =
      renderStyle.getAttachedRenderParentRenderStyle();
  if (parentRenderStyle == null) {
    return false;
  }

  final BoxConstraints? parentContentConstraints =
      parentRenderStyle.contentConstraints();
  final bool parentHasDefiniteWidth =
      parentRenderStyle.width.isNotAuto ||
      (parentContentConstraints?.hasTightWidth ?? false);

  bool isStretch = false;

  bool isParentFlex = parentRenderStyle.display == CSSDisplay.flex ||
      parentRenderStyle.display == CSSDisplay.inlineFlex;
  bool isHorizontalDirection = false;
  bool isFlexNoWrap = false;
  bool isChildStretchSelf = false;
  final bool isHorizontalWritingMode =
      parentRenderStyle.writingMode == CSSWritingMode.horizontalTb;
  if (isParentFlex) {
    final bool isPositioned = renderStyle.position == CSSPositionType.absolute ||
        renderStyle.position == CSSPositionType.fixed;
    if (isPositioned) {
      return false;
    }

    isHorizontalDirection =
        CSSFlex.isHorizontalFlexDirection(parentRenderStyle.flexDirection);
    isFlexNoWrap = parentRenderStyle.flexWrap != FlexWrap.wrap &&
        parentRenderStyle.flexWrap != FlexWrap.wrapReverse;
    isChildStretchSelf = renderStyle.alignSelf != AlignSelf.auto
        ? renderStyle.alignSelf == AlignSelf.stretch
        : parentRenderStyle.alignItems == AlignItems.stretch;
  }

  CSSLengthValue marginLeft = renderStyle.marginLeft;
  CSSLengthValue marginRight = renderStyle.marginRight;

  if (marginLeft.isNotAuto &&
      marginRight.isNotAuto &&
      isParentFlex &&
      isHorizontalWritingMode &&
      !isHorizontalDirection &&
      isFlexNoWrap &&
      isChildStretchSelf &&
      parentHasDefiniteWidth) {
    isStretch = true;
  }

  return isStretch;
}