parse method
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();
}
},
);
}