parse method

Widget parse(
  1. PaywallElement element
)

Implementation

Widget parse(PaywallElement element) {
  if (element.type == null) {
    _debugPaywallParserLog(
      'Element type is null for element ID: ${element.id}',
    );
    return const SizedBox.shrink();
  }

  return Builder(
    builder: (context) {
      switch (element.type) {
        case 'layout':
          return _buildLayout(element, context);
        case 'hero-image':
          return _buildHeroImage(element, context);
        case 'text':
          return _buildText(element);
        case 'button':
          return _buildButton(element, context);
        case 'footer':
          return _buildFooter(element, context);
        case 'link':
          return _buildLink(element);
        case 'packages':
          _selectedPackageId = element.selectedPackageId;
          return PaywallPackages(
            element: element,
            assets: _assets,
            localizationHelper: _localizationHelper,
            paywallData: paywallData,
            customFontFamily: _customFontFamily,
            onPackageIdChanged: (packageId) {
              _selectedPackageId = packageId;
            },
          );
        case 'package-item':
          // Package items are handled within the packages widget
          return const SizedBox.shrink();
        case 'tab-control':
          return _buildTabControl(element, context);
        case 'group':
          return _buildGroup(element, context);
        case 'image':
          return _buildImage(element);
        case 'card':
          return _buildCard(element, context);
        case 'list':
          return _buildList(element, context);
        case 'list-item':
          final listElement = (paywallData.elements ?? []).firstWhereOrNull(
            (e) => e.type == 'list',
          );
          if (listElement != null) {
            return _buildListItem(element, listElement);
          }
          return const SizedBox.shrink();
        default:
          _debugPaywallParserLog(
            'WARNING: Unknown element type encountered: ${element.type} (ID: ${element.id})',
          );
          return const SizedBox.shrink();
      }
    },
  );
}