import 'dart:async'; import 'package:clean/base/base_page.dart'; import 'package:clean/module/store/discount/discount_controller.dart'; import 'package:clean/utils/expand.dart'; import 'package:flutter/Material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import '../../../resource/assets.gen.dart'; import 'count_down_timer.dart'; import 'func_page_view.dart'; class DiscountPage extends BasePage { const DiscountPage({super.key}); @override bool immersive() { return true; } @override bool statusBarDarkFont() => false; @override Widget buildBody(BuildContext context) { return Obx(() { bool isFreeItem = (controller.currentSelectedStoreItem.value?.freeTrialName != null); bool isShowFree = isFreeItem && controller.isFree.value; return Scaffold( backgroundColor: "#05050D".color, body: Stack( children: [ SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ _AppBar(), _DiscountHeader(), SizedBox(height: 26.h), // 创建一个1分钟的倒计时 CountdownTimer(duration: const Duration(minutes: 1)), SizedBox(height: 40.h), _FeaturesPreview(), Spacer(), _PurchaseSection( isShowFree: isShowFree, controller: controller, ), ], ), ), ], ), ); }); } } class _AppBar extends StatelessWidget { const _AppBar({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Row( children: [ Container( margin: EdgeInsets.only(left: 16.w, top: 14.h), child: GestureDetector( onTap: () { Get.back(); }, child: Assets.images.iconStoreClose .image(width: 28.w, height: 28.w), ), ), ], ); } } class _DiscountHeader extends StatelessWidget { const _DiscountHeader({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Column( children: [ Assets.images.iconDiscountTitle .image(width: 259.w, height: 55.h), SizedBox(height: 20.h), Assets.images.iconDiscountPercent .image(width: 195.w, height: 86.h), SizedBox(height: 13.h), Container( width: 197.w, height: 32.h, padding: EdgeInsets.all(1.w), decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ '#CF9EFD'.color, '#4DCFFF'.color.withOpacity(0.5), ], ), borderRadius: BorderRadius.all(Radius.circular(18.r)), ), child: Container( decoration: BoxDecoration( color: "#05050D".color, borderRadius: BorderRadius.all(Radius.circular(18.r)), ), child: Center( child: Text( "Get CleanPro Premium", style: TextStyle( color: Colors.white, fontSize: 15.sp, fontWeight: FontWeight.w700, ), ), ), ), ), ], ); } } class _FeaturesPreview extends StatelessWidget { const _FeaturesPreview({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return InfinitePreviewPageView( height: 98.h, autoPlay: true, autoPlayDuration: const Duration(seconds: 5), items: [ PreviewItem( title: 'One-click Remove Similar Photos', icon: Assets.images.iconStoreSimilar.image(), ), PreviewItem( title: 'Detect Blurry and Junk Photos', icon: Assets.images.iconStoreAi.image(), ), PreviewItem( title: 'Merge Duplicate Contacts', icon: Assets.images.iconStoreContacts.image(), ), PreviewItem( title: 'Premium Unlimited', icon: Assets.images.iconStorePremium.image(), ), ], ); } } class _PurchaseSection extends StatelessWidget { final bool isShowFree; final DiscountController controller; const _PurchaseSection({ Key? key, required this.isShowFree, required this.controller, }) : super(key: key); @override Widget build(BuildContext context) { return Column( children: [ Text( isShowFree ? controller.currentSelectedStoreItem.value?.freeTrialName ?? "" : controller.currentSelectedStoreItem.value?.name ?? "", style: TextStyle( color: Colors.white, fontSize: 16.sp, fontWeight: FontWeight.w500, ), ), Text( isShowFree ? controller.currentSelectedStoreItem.value?.freeTrialPriceDesc ?? "" : controller.currentSelectedStoreItem.value?.priceDesc ?? "", style: TextStyle( color: Colors.white, fontSize: 13.sp, ), ), SizedBox(height: 14.h), GestureDetector( onTap: () { controller.onBuyClick(); }, child: Container( width: 312.w, height: 48.h, decoration: BoxDecoration( color: "#0279FB".color, borderRadius: BorderRadius.all( Radius.circular(24.r), ), ), child: Center( child: Text( isShowFree ? "START FREE TRIAL" : "START NOW", style: TextStyle( color: Colors.white, fontWeight: FontWeight.w700, fontSize: 16.sp, ), ), ), ), ), SizedBox(height: 5.h), Text( isShowFree ? "No payment now!" : "Cancel anytime", style: TextStyle( color: isShowFree ? "#57C87A".color : Colors.white, fontSize: 12.sp, fontWeight: FontWeight.w500, ), ), ], ); } }