build method

Widget build()

构建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,
    );
  }
}