Pārlūkot izejas kodu

update discount page codebase

Destiny 8 mēneši atpakaļ
vecāks
revīzija
2f7cb3c6cc
1 mainītis faili ar 185 papildinājumiem un 152 dzēšanām
  1. 185 152
      lib/module/store/discount/discount_view.dart

+ 185 - 152
lib/module/store/discount/discount_view.dart

@@ -36,161 +36,17 @@ class DiscountPage extends BasePage<DiscountController> {
               child: Column(
                 crossAxisAlignment: CrossAxisAlignment.center,
                 children: [
-                  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),
-                        ),
-                      ),
-                    ],
-                  ),
-                  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,
-                          ),
-                        ),
-                      ),
-                    ),
-                  ),
-                  SizedBox(
-                    height: 26.h,
-                  ),
+                  _AppBar(),
+                  _DiscountHeader(),
+                  SizedBox(height: 26.h),
                   // 创建一个1分钟的倒计时
                   CountdownTimer(duration: const Duration(minutes: 1)),
-                  SizedBox(
-                    height: 40.h,
-                  ),
-                  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(),
-                      ),
-                    ],
-                  ),
+                  SizedBox(height: 40.h),
+                  _FeaturesPreview(),
                   Spacer(),
-                  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,
-                    ),
+                  _PurchaseSection(
+                    isShowFree: isShowFree,
+                    controller: controller,
                   ),
                 ],
               ),
@@ -201,3 +57,180 @@ class DiscountPage extends BasePage<DiscountController> {
     });
   }
 }
+
+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,
+          ),
+        ),
+      ],
+    );
+  }
+}
+