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