render method
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);
}