render method

Widget render({
  1. required Node node,
  2. required Size parentSize,
  3. required List<Widget> children,
})

Implementation

Widget render({
  required final figma.Node node,
  required final Size parentSize,
  required final List<Widget> children,
}) {
  final layoutAdapter = FigmaLayoutAdapter(node);
  final decorationAdapter = FigmaDecorationAdapter(node);
  final constraintsAdapter = FigmaConstraintsAdapter(node, parentSize);

  layoutAdapter.validateLayout();

  final isRow = layoutAdapter.layoutMode == figma.LayoutMode.horizontal;

  // Create the appropriate layout widget based on properties
  Widget layoutWidget;

  // Check if we should use Wrap or Flex
  if (layoutAdapter.isWrapLayout) {
    layoutWidget = Wrap(
      direction: isRow ? Axis.horizontal : Axis.vertical,
      alignment: _getWrapAlignment(layoutAdapter.getMainAxisAlignment()),
      crossAxisAlignment: _getWrapCrossAlignment(
        layoutAdapter.getCrossAxisAlignment(),
      ),
      spacing: layoutAdapter.itemSpacing,
      runSpacing: layoutAdapter.itemSpacing,
      children: children,
    );
  } else {
    // Use Flex widget for standard layouts
    layoutWidget = Flex(
      direction: isRow ? Axis.horizontal : Axis.vertical,
      mainAxisAlignment: layoutAdapter.getMainAxisAlignment(),
      crossAxisAlignment: layoutAdapter.getCrossAxisAlignment(),
      mainAxisSize: layoutAdapter.mainAxisSize,
      children: _addSpacing(children, layoutAdapter),
    );
  }

  // Apply padding and decoration if needed
  if (layoutAdapter.padding != EdgeInsets.zero ||
      decorationAdapter.supportsDecoration) {
    layoutWidget = Container(
      decoration: decorationAdapter.createBoxDecoration(),
      padding: layoutAdapter.padding,
      child: decorationAdapter.wrapWithBlurEffects(layoutWidget),
    );
  }

  // Apply any additional constraints
  return constraintsAdapter.applyConstraints(layoutWidget);
}