render method

Widget render({
  1. required Node node,
  2. required BuildContext context,
  3. List<NodeTransformer> transformers = const [],
  4. Node? parent,
  5. TransformerManager? transformerManager,
})

Renders a Figma node and all its children recursively.

The node is the Figma node to render. The context is the BuildContext for responsive sizing. The transformers list allows customizing the rendering behavior. The parent is the parent node (if any). The transformerManager is used internally for applying transformations.

Implementation

Widget render({
  required figma.Node node,
  required BuildContext context,
  List<NodeTransformer> transformers = const [],
  figma.Node? parent,
  TransformerManager? transformerManager,
}) {
  if (!node.visible) return const SizedBox.shrink();

  transformerManager ??= TransformerManager(transformers: transformers);

  try {
    final children =
        _getChildNodes(node)?.where((e) => e?.visible == true).toList();

    List<Widget>? childWidgets;
    if (children != null && children.isNotEmpty) {
      final childTransformers = transformerManager.getChildTransformers(
        node,
        parent,
      );

      childWidgets = [];
      for (final child in children) {
        if (child != null) {
          childWidgets.add(
            render(
              node: child,
              context: context,
              transformers: childTransformers,
              parent: node,
              transformerManager: transformerManager,
            ),
          );
        }
      }
    }

    Widget baseWidget = _createBaseWidget(node, context);
    baseWidget =
        childWidgets != null
            ? _combineWithChildren(node, childWidgets)
            : baseWidget;
    final transformContext = TransformContext(
      buildContext: context,
      node: node,
      parent: parent,
      defaultWidget: baseWidget,
    );

    final transformedWidget = transformerManager.transformNode(
      buildContext: context,
      node: node,
      parent: parent,
      defaultWidget: baseWidget,
      transformContext: transformContext,
    );

    return transformedWidget;
  } catch (e, stackTrace) {
    debugPrint('Error rendering node: $e');
    debugPrint('Stack trace: $stackTrace');
    return SizedBox(
      width: 50,
      height: 50,
      child: ColoredBox(color: Colors.red.withValues(alpha: 0.3)),
    );
  }
}