buildWrap static method

Widget buildWrap(
  1. BuildContext context,
  2. FlyStyle style,
  3. List<Widget> children
)

Build a Wrap widget with layout properties from FlyStyle

Implementation

static Widget buildWrap(
  BuildContext context,
  FlyStyle style,
  List<Widget> children,
) {
  // Check if direct Flutter API parameters are provided
  final wrapParams = style.wrap as WrapParams?;

  Axis direction;
  WrapAlignment alignment;
  double spacing;
  WrapAlignment runAlignment;
  double runSpacing;
  WrapCrossAlignment crossAxisAlignment;
  TextDirection? textDirection;
  VerticalDirection verticalDirection;
  Clip clipBehavior;

  if (wrapParams != null) {
    // Use direct Flutter API parameters
    direction = wrapParams.direction ?? Axis.horizontal;
    alignment = wrapParams.alignment ?? WrapAlignment.start;
    spacing = wrapParams.spacing ?? resolveSpacing(context, style.gap);
    runAlignment = wrapParams.runAlignment ?? WrapAlignment.start;
    runSpacing = wrapParams.runSpacing ?? 0.0;
    crossAxisAlignment =
        wrapParams.crossAxisAlignment ?? WrapCrossAlignment.start;
    textDirection = wrapParams.textDirection;
    verticalDirection =
        wrapParams.verticalDirection ??
        (style.reverse == true
            ? VerticalDirection.up
            : VerticalDirection.down);
    clipBehavior = wrapParams.clipBehavior ?? Clip.none;
  } else {
    // Use utility method parameters - only supported properties
    direction = Axis.horizontal;
    alignment = WrapAlignment.start;
    spacing = resolveSpacing(context, style.gap);
    runAlignment = WrapAlignment.start;
    runSpacing = 0.0;
    crossAxisAlignment = WrapCrossAlignment.start;
    textDirection = null;
    verticalDirection = style.reverse == true
        ? VerticalDirection.up
        : VerticalDirection.down;
    clipBehavior = Clip.none;
  }

  // Apply flex properties to children first
  final childrenWithFlex = applyFlexToChildren(context, children);

  // Note: For Wrap, we don't apply gap using SizedBox like Column/Row
  // The spacing is handled directly by the Wrap widget's spacing parameter

  return Wrap(
    direction: direction,
    alignment: alignment,
    spacing: spacing,
    runAlignment: runAlignment,
    runSpacing: runSpacing,
    crossAxisAlignment: crossAxisAlignment,
    textDirection: textDirection,
    verticalDirection: verticalDirection,
    clipBehavior: clipBehavior,
    children: childrenWithFlex,
  );
}