import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:refilc/models/settings.dart'; import 'package:refilc_plus/providers/plus_provider.dart'; import 'package:refilc_plus/ui/mobile/plus/activation_view/activation_view.dart'; import 'package:refilc_mobile_ui/plus/plus_screen.i18n.dart'; import 'package:url_launcher/url_launcher.dart'; class PlusPlanCard extends StatelessWidget { const PlusPlanCard({ super.key, required this.iconPath, required this.title, required this.description, required this.color, required this.gradient, this.price = 0, required this.id, this.active = false, this.borderRadius, this.features = const [], required this.docsAccepted, }); final String iconPath; final String title; final String description; final Color color; final LinearGradient gradient; final double price; final String id; final bool active; final BorderRadiusGeometry? borderRadius; final List> features; final bool docsAccepted; @override Widget build(BuildContext context) { return GestureDetector( onTap: () { if (!docsAccepted) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar( content: Text( "El kell fogadnod az ÁSZF-et és az Adatkezelési Tájékoztatót!", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), ), backgroundColor: Colors.white, )); return; } if (Provider.of(context).xFilcId == "none") { ScaffoldMessenger.of(context).showSnackBar(const SnackBar( content: Text( "Be kell kapcsolnod a Névtelen Analitikát a beállítások főoldalán, mielőtt reFilc+ előfizetést vásárolnál!", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), ), backgroundColor: Colors.white, )); return; } if (Provider.of(context, listen: false).hasPremium) { if (!active) { launchUrl( Uri.parse( 'https://billing.stripe.com/p/login/4gwbIRclL89D5PicMM'), mode: LaunchMode.inAppBrowserView, ); } return; } Navigator.of(context).push(MaterialPageRoute(builder: (context) { return PremiumActivationView(product: id); })); }, child: Container( decoration: BoxDecoration( gradient: gradient, borderRadius: borderRadius!.add(BorderRadius.circular(1.5)), ), padding: const EdgeInsets.all(1.5), child: Card( margin: EdgeInsets.zero, shape: RoundedRectangleBorder( borderRadius: borderRadius!, ), shadowColor: Colors.transparent, surfaceTintColor: Colors.white, color: Colors.white.withOpacity(0.9), child: Padding( padding: const EdgeInsets.only( top: 18.0, bottom: 16.0, left: 22.0, right: 18.0), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ Image.asset( iconPath, width: iconPath.endsWith('ink.png') ? 29.0 : 25.0, height: 25.0, ), const SizedBox( width: 12.0, ), Text( title, style: const TextStyle( fontSize: 22.0, color: Color(0xFF0B0B0B), fontWeight: FontWeight.w600, height: 1.2, ), ), ], ), Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(20.0), gradient: active ? const LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ Color.fromARGB(255, 196, 213, 253), Color.fromARGB(255, 227, 235, 250), Color.fromARGB(255, 214, 226, 250), ], ) : const LinearGradient( colors: [ Color(0xFFEFF4FE), Color(0xFFEFF4FE), ], ), ), padding: const EdgeInsets.all(2.0), child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(20.0), color: const Color(0xFFEFF4FE), ), padding: const EdgeInsets.symmetric( horizontal: 10.0, vertical: 2.0), child: Text( active ? 'active'.i18n : '${price.toStringAsFixed(2).replaceAll('.', ',')} €', style: const TextStyle( fontSize: 16.6, color: Color(0xFF243F76), fontWeight: FontWeight.w600, ), ), ), ), ], ), const SizedBox( height: 12.0, ), Text( description, style: TextStyle( color: const Color(0xFF011234).withOpacity(0.6), fontSize: 13.69, fontWeight: FontWeight.w500, ), ), const SizedBox( height: 14.20, ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: features .map((e) => Column( children: [ const SizedBox( height: 10.0, ), Row( children: [ SizedBox( width: 22.22, child: Text( e[0], style: const TextStyle(fontSize: 18.0), ), ), const SizedBox( width: 14.0, ), Expanded( child: e[1].endsWith('tier_benefits') ? Text.rich( style: const TextStyle( height: 1.2, fontWeight: FontWeight.w500, color: Color(0xFF011234), fontSize: 13.69, ), TextSpan( children: [ TextSpan( text: 'every'.i18n, ), e[1].startsWith('cap') ? const TextSpan( text: 'reFilc+', style: TextStyle( color: Color(0xFF7C3EFF), fontWeight: FontWeight.w600, ), ) : TextSpan( children: [ const TextSpan( text: 'reFilc+', style: TextStyle( color: Color( 0xFF7C3EFF), fontWeight: FontWeight .w600, ), ), TextSpan( text: 'and'.i18n, ), const TextSpan( text: 'reFilc+ Gold', style: TextStyle( color: Color( 0xFF0061BB), fontWeight: FontWeight .w600, ), ), ], ), TextSpan(text: 'benefit'.i18n), ], ), ) : Text( e[1], maxLines: 2, style: const TextStyle( height: 1.2, color: Color(0xFF011234), fontWeight: FontWeight.w500, fontSize: 13.69, ), ), ), ], ), ], )) .toList(), ), ], ), ), ), ), ); } }