import 'package:flutter/material.dart'; import 'package:gravity_sdk/gravity_sdk.dart'; import 'package:visibility_detector/visibility_detector.dart'; import 'gravity_content.dart'; class CheckoutVariantButton extends StatefulWidget { const CheckoutVariantButton({super.key, required this.onCheckout}); final VoidCallback onCheckout; @override State createState() => _CheckoutVariantButtonState(); } class _CheckoutVariantButtonState extends State { ContentExposure? exposure; String label = 'Оформить заказ'; Key visibilityKey = UniqueKey(); @override void initState() { super.initState(); _load(); } Future _load() async { try { final selected = await loadSelectedContent( selector: 'checkout_button', pageContext: const PageContext( type: ContextType.cart, data: [], location: 'app://cart', ), ); if (!mounted || selected == null) return; final config = selected.content.variables.valueOf>( 'checkout_button', ); if (config == null) return; final variant = config['variant']; final text = config['label']; if ((variant != 'A' && variant != 'B') || text is! String || text.trim().isEmpty) { return; } setState(() { label = text; exposure = ContentExposure(selected); visibilityKey = UniqueKey(); }); } catch (_) { // Кнопка оформления остаётся доступна с исходным текстом. } } @override Widget build(BuildContext context) => VisibilityDetector( key: visibilityKey, onVisibilityChanged: (info) => exposure?.onVisibility(info.visibleFraction), child: FilledButton( onPressed: () { exposure?.click(); widget.onCheckout(); }, child: Text(label), ), ); }