buildRowColumnWidget static method
Widget
buildRowColumnWidget(
- BaseNode rowColumnNode, {
- required List<Widget> childrenWidgets,
- required List<BaseNode> childrenNodes,
- required bool withScroll,
})
Implementation
static Widget buildRowColumnWidget(
BaseNode rowColumnNode, {
required List<Widget> childrenWidgets,
required List<BaseNode> childrenNodes,
required bool withScroll,
}) {
assert(rowColumnNode is RowColumnMixin);
final bool isRow =
(rowColumnNode as RowColumnMixin).rowColumnType == RowColumnType.row;
final double? fixWidth;
final double? fixHeight;
if (rowColumnNode.verticalFit == SizeFit.locked ||
rowColumnNode.verticalFit == SizeFit.fixed) {
fixHeight = rowColumnNode.outerBoxLocal.height;
} else if (rowColumnNode.verticalFit == SizeFit.shrinkWrap) {
fixHeight = rowColumnNode.constraints.minHeight;
} else {
fixHeight = rowColumnNode.constraints.maxHeight ?? double.infinity;
}
if (rowColumnNode.horizontalFit == SizeFit.locked ||
rowColumnNode.horizontalFit == SizeFit.fixed) {
fixWidth = rowColumnNode.outerBoxLocal.width;
} else if (rowColumnNode.horizontalFit == SizeFit.shrinkWrap) {
fixWidth = rowColumnNode.constraints.minWidth;
} else {
fixWidth = rowColumnNode.constraints.maxWidth ?? double.infinity;
}
if (isRow) {
Widget res = Row(
mainAxisAlignment: rowColumnNode.mainAxisAlignment.flutterAxis,
crossAxisAlignment: rowColumnNode.crossAxisAlignment.flutterAxis,
mainAxisSize: (rowColumnNode.horizontalFit == SizeFit.shrinkWrap)
? MainAxisSize.min
: MainAxisSize.max,
key: ValueKey(rowColumnNode.id),
children: childrenWidgets,
);
if (fixHeight == null && rowColumnNode.isVerticalWrap) {
final bool anyChildNeedsAlignment = childrenNodes.any(
(child) => child.alignment != AlignmentModel.none,
);
if (anyChildNeedsAlignment) {
res = IntrinsicHeight(child: res);
}
}
if (withScroll &&
rowColumnNode is ScrollableMixin &&
(rowColumnNode as ScrollableMixin).isScrollable) {
res = wrapWithPaddedScrollable(
padding: rowColumnNode.resolvedPadding().flutterEdgeInsets,
node: (rowColumnNode as ScrollableMixin),
child: res,
);
}
if (fixWidth == null && fixHeight == null) return res;
return SizedBox(
width: fixWidth,
height: fixHeight,
child: res,
);
} else {
Widget res = Column(
mainAxisAlignment: rowColumnNode.mainAxisAlignment.flutterAxis,
crossAxisAlignment: rowColumnNode.crossAxisAlignment.flutterAxis,
mainAxisSize: (rowColumnNode.verticalFit == SizeFit.shrinkWrap)
? MainAxisSize.min
: MainAxisSize.max,
key: ValueKey(rowColumnNode.id),
children: childrenWidgets,
);
if (fixWidth == null && rowColumnNode.isHorizontalWrap) {
final bool anyChildNeedsAlignment = childrenNodes.any(
(child) => child.alignment != AlignmentModel.none,
);
if (anyChildNeedsAlignment) {
res = IntrinsicWidth(child: res);
}
}
if (withScroll &&
rowColumnNode is ScrollableMixin &&
(rowColumnNode as ScrollableMixin).isScrollable) {
res = wrapWithPaddedScrollable(
padding: rowColumnNode.resolvedPadding().flutterEdgeInsets,
node: (rowColumnNode as ScrollableMixin),
child: res,
);
}
if (fixWidth == null && fixHeight == null) return res;
return SizedBox(
width: fixWidth,
height: fixHeight,
child: res,
);
}
}