build method
构建Flex组件 - 只负责布局,不含视觉样式
Implementation
Widget build() {
// 先处理order排序,再处理gap间距,最后处理divide分隔线
List<Widget> orderedChildren = _buildOrderedChildren();
List<Widget> childrenWithGap = _buildChildrenWithGap(orderedChildren);
List<Widget> childrenWithDivide = _buildChildrenWithDivide(childrenWithGap);
// 如果启用了 flex-wrap,使用 Wrap widget
if (_flexWrap) {
// 将 MainAxisAlignment 转换为 WrapAlignment
WrapAlignment wrapAlignment = WrapAlignment.start;
switch (_mainAxisAlignment) {
case MainAxisAlignment.start:
wrapAlignment = WrapAlignment.start;
break;
case MainAxisAlignment.end:
wrapAlignment = WrapAlignment.end;
break;
case MainAxisAlignment.center:
wrapAlignment = WrapAlignment.center;
break;
case MainAxisAlignment.spaceBetween:
wrapAlignment = WrapAlignment.spaceBetween;
break;
case MainAxisAlignment.spaceAround:
wrapAlignment = WrapAlignment.spaceAround;
break;
case MainAxisAlignment.spaceEvenly:
wrapAlignment = WrapAlignment.spaceEvenly;
break;
}
// 将 CrossAxisAlignment 转换为 WrapCrossAlignment
WrapCrossAlignment wrapCrossAlignment = WrapCrossAlignment.start;
switch (_crossAxisAlignment) {
case CrossAxisAlignment.start:
wrapCrossAlignment = WrapCrossAlignment.start;
break;
case CrossAxisAlignment.end:
wrapCrossAlignment = WrapCrossAlignment.end;
break;
case CrossAxisAlignment.center:
wrapCrossAlignment = WrapCrossAlignment.center;
break;
case CrossAxisAlignment.stretch:
wrapCrossAlignment = WrapCrossAlignment.center; // Wrap 不支持 stretch
break;
case CrossAxisAlignment.baseline:
wrapCrossAlignment = WrapCrossAlignment.start; // Wrap 不支持 baseline
break;
}
return Wrap(
direction: _direction,
alignment: wrapAlignment,
spacing: _gap ?? 0.0,
runAlignment: wrapAlignment,
runSpacing: _gap ?? 0.0,
crossAxisAlignment: wrapCrossAlignment,
textDirection: _textDirection,
verticalDirection: _verticalDirection,
children: childrenWithDivide,
);
}
// 否则使用 Row/Column
if (_direction == Axis.horizontal) {
return Row(
mainAxisAlignment: _mainAxisAlignment,
crossAxisAlignment: _crossAxisAlignment,
mainAxisSize: _mainAxisSize,
textDirection: _textDirection,
verticalDirection: _verticalDirection,
children: childrenWithDivide,
);
} else {
return Column(
mainAxisAlignment: _mainAxisAlignment,
crossAxisAlignment: _crossAxisAlignment,
mainAxisSize: _mainAxisSize,
textDirection: _textDirection,
verticalDirection: _verticalDirection,
children: childrenWithDivide,
);
}
}