Przeglądaj źródła

[feat]1.购买须知改成从后台获取

云天逵 6 miesięcy temu
rodzic
commit
f2bb256670

+ 6 - 1
lib/data/repository/config_repository.dart

@@ -35,6 +35,8 @@ class ConfigRepository {
 
   final Rxn<IntimacyConfigInfo> intimacyConfigInfo = Rxn<IntimacyConfigInfo>();
 
+  final RxString memberTips = ''.obs;
+
   ConfigRepository(this.atmobApi) {
     AtmobLog.d(tag, '$tag....init');
     refreshConfig();
@@ -64,6 +66,9 @@ class ConfigRepository {
           } else if (config.confCode == 'default_avatar') {
             defaultAvatarInfo.value = DefaultAvatarInfo.fromJson(config.value);
             AtmobLog.d(tag, '获取默认头像配置: ${defaultAvatarInfo.value?.toJson()}');
+          }else if(config.confCode=='member_tips'){
+            memberTips.value = config.value['tips'] ?? '';
+            AtmobLog.d(tag, '购买须知: ${memberTips.value}');
           }
         }
       }
@@ -82,7 +87,7 @@ class ConfigRepository {
   /// 获取配置信息
   Future<ConfigResponse> requestConfigsData() {
     return atmobApi
-        .confs(ConfigRequest(confCodes: ['intimacy', 'default_avatar']))
+        .confs(ConfigRequest(confCodes: ['intimacy', 'default_avatar','member_tips']))
         .then(HttpHandler.handle(true));
   }
 

+ 9 - 7
lib/di/get_it.config.dart

@@ -307,6 +307,14 @@ extension GetItInjectableX on _i174.GetIt {
         gh<_i738.IntimacyAnalyzeConfigHelper>(),
       ),
     );
+    gh.factory<_i344.StoreController>(
+      () => _i344.StoreController(
+        gh<_i987.StoreRepository>(),
+        gh<_i83.AccountRepository>(),
+        gh<_i779.PaymentStatusManager>(),
+        gh<_i50.ConfigRepository>(),
+      ),
+    );
     gh.factory<_i566.IntimacyScaleController>(
       () => _i566.IntimacyScaleController(gh<_i274.KeyboardRepository>()),
     );
@@ -448,13 +456,7 @@ extension GetItInjectableX on _i174.GetIt {
       () => _i326.NewDiscountController(
         gh<_i987.StoreRepository>(),
         gh<_i83.AccountRepository>(),
-        gh<_i779.PaymentStatusManager>(),
-      ),
-    );
-    gh.factory<_i344.StoreController>(
-      () => _i344.StoreController(
-        gh<_i987.StoreRepository>(),
-        gh<_i83.AccountRepository>(),
+        gh<_i50.ConfigRepository>(),
         gh<_i779.PaymentStatusManager>(),
       ),
     );

+ 7 - 4
lib/module/store/new_discount/new_discount_controller.dart

@@ -4,11 +4,12 @@ import 'package:agile_pay/flutter_pay.dart';
 import 'package:carousel_slider/carousel_controller.dart';
 import 'package:carousel_slider/carousel_options.dart';
 import 'package:flutter/material.dart';
+import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
-import 'package:get/get.dart';
 import 'package:keyboard/data/bean/character_info.dart';
 import 'package:keyboard/module/store/new_discount/member_card_bean.dart';
+
 import '../../../data/api/response/user_info_response.dart';
 import '../../../data/bean/goods_info.dart';
 import '../../../data/bean/member_info.dart';
@@ -19,6 +20,7 @@ import '../../../data/consts/error_code.dart';
 import '../../../data/consts/event_report.dart';
 import '../../../data/consts/payment_type.dart';
 import '../../../data/repository/account_repository.dart';
+import '../../../data/repository/config_repository.dart';
 import '../../../data/repository/store_repository.dart';
 import '../../../dialog/alipay_qr_code_dialog.dart';
 import '../../../dialog/loading_dialog.dart';
@@ -32,12 +34,9 @@ import '../../../resource/assets.gen.dart';
 import '../../../resource/string.gen.dart';
 import '../../../utils/async_util.dart';
 import '../../../utils/atmob_log.dart';
-import '../../../utils/date_util.dart';
-import '../../../utils/error_handler.dart';
 import '../../../utils/http_handler.dart';
 import '../../../utils/payment_status_manager.dart';
 import '../../../utils/toast_util.dart';
-import '../store_banner_bean.dart';
 import '../suprise/surprise_dialog.dart';
 import '../ticket/discount_ticket_dialog.dart';
 import 'new_discount_page.dart';
@@ -51,8 +50,11 @@ class NewDiscountController extends BaseController
 
   final AccountRepository accountRepository;
 
+  final ConfigRepository configRepository;
+
   final PaymentStatusManager paymentStatusManager;
 
+
   RxList<GoodsInfo> get goodsInfoList =>
       storeRepository.newDiscountGoodsInfoList;
 
@@ -154,6 +156,7 @@ class NewDiscountController extends BaseController
   NewDiscountController(
     this.storeRepository,
     this.accountRepository,
+    this.configRepository,
     this.paymentStatusManager,
   );
 

+ 152 - 149
lib/module/store/new_discount/new_discount_page.dart

@@ -45,43 +45,44 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
           controller.clickBack();
         },
         child: Stack(
-      children: [
-        Positioned(top: 0.w, child: _buildBanner()),
-        Positioned(
-          top: 408.w,
-          child: Container(
-            decoration: BoxDecoration(
-              color: ColorName.white,
-              borderRadius: BorderRadius.only(
-                topLeft: Radius.circular(24.r),
-                topRight: Radius.circular(24.r),
-              ),
-            ),
-            width: 360.w,
-            height: 392.w,
-            child: SingleChildScrollView(
-              child: Column(
-                children: [
-                  SizedBox(height: 16.w),
-                  _buildGoodsCard(),
-                  SizedBox(height: 12.w),
-                  _buildPayWayCard(),
-                  SizedBox(height: 8.w),
-                  _buildSelectedDesc(),
-                  SizedBox(height: 30.w),
-                  _buildMemberCard(),
+          children: [
+            Positioned(top: 0.w, child: _buildBanner()),
+            Positioned(
+              top: 408.w,
+              child: Container(
+                decoration: BoxDecoration(
+                  color: ColorName.white,
+                  borderRadius: BorderRadius.only(
+                    topLeft: Radius.circular(24.r),
+                    topRight: Radius.circular(24.r),
+                  ),
+                ),
+                width: 360.w,
+                height: 392.w,
+                child: SingleChildScrollView(
+                  child: Column(
+                    children: [
+                      SizedBox(height: 16.w),
+                      _buildGoodsCard(),
+                      SizedBox(height: 12.w),
+                      _buildPayWayCard(),
+                      SizedBox(height: 8.w),
+                      _buildSelectedDesc(),
+                      SizedBox(height: 30.w),
+                      _buildMemberCard(),
 
-                  SizedBox(height: 200.w),
-                ],
+                      SizedBox(height: 200.w),
+                    ],
+                  ),
+                ),
               ),
             ),
-          ),
-        ),
-        Positioned(top: 0, left: 0, right: 0, child: _buildTitle()),
+            Positioned(top: 0, left: 0, right: 0, child: _buildTitle()),
 
-        Positioned(bottom: 0, left: 0, right: 0, child: _buildBuyButtonCard()),
-      ],
-    ));
+            Positioned(
+                bottom: 0, left: 0, right: 0, child: _buildBuyButtonCard()),
+          ],
+        ));
   }
 
   _buildTitle() {
@@ -129,9 +130,9 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
             ),
 
             items:
-                controller.bannerList.map((item) {
-                  return item.image(width: 360.w, fit: BoxFit.contain);
-                }).toList(),
+            controller.bannerList.map((item) {
+              return item.image(width: 360.w, fit: BoxFit.contain);
+            }).toList(),
           ),
           Positioned(
             bottom: 149.16.w,
@@ -162,36 +163,40 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
   _buildIndicator() {
     return Row(
       children:
-          controller.bannerList.asMap().entries.map((entry) {
-            return Obx(() {
-              final isSelectedBanner =
-                  controller.currentBannerIndex == entry.key;
-              return Row(
-                mainAxisAlignment: MainAxisAlignment.spaceAround,
-                children: [
-                  GestureDetector(
-                    onTap:
-                        () => controller.carouselSliderController.animateToPage(
-                          entry.key,
-                        ),
-                    child: AnimatedContainer(
-                      duration: const Duration(milliseconds: 300),
-                      margin: EdgeInsets.only(right: 5.w),
-                      height: 5.w,
-                      width: isSelectedBanner ? 10.w : 5.w,
-                      decoration: BoxDecoration(
-                        color:
-                            isSelectedBanner
-                                ? const Color(0xff483459)
-                                : const Color(0xffAFB4BF),
-                        borderRadius: BorderRadius.circular(5.r),
-                      ),
+      controller.bannerList
+          .asMap()
+          .entries
+          .map((entry) {
+        return Obx(() {
+          final isSelectedBanner =
+              controller.currentBannerIndex == entry.key;
+          return Row(
+            mainAxisAlignment: MainAxisAlignment.spaceAround,
+            children: [
+              GestureDetector(
+                onTap:
+                    () =>
+                    controller.carouselSliderController.animateToPage(
+                      entry.key,
                     ),
+                child: AnimatedContainer(
+                  duration: const Duration(milliseconds: 300),
+                  margin: EdgeInsets.only(right: 5.w),
+                  height: 5.w,
+                  width: isSelectedBanner ? 10.w : 5.w,
+                  decoration: BoxDecoration(
+                    color:
+                    isSelectedBanner
+                        ? const Color(0xff483459)
+                        : const Color(0xffAFB4BF),
+                    borderRadius: BorderRadius.circular(5.r),
                   ),
-                ],
-              );
-            });
-          }).toList(),
+                ),
+              ),
+            ],
+          );
+        });
+      }).toList(),
     );
   }
 
@@ -209,46 +214,46 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
             int rowCount = 2;
             int startIndex = columnIndex * rowCount;
             final List<CharacterInfo> columnItems =
-                controller.charactersList
-                    .skip(startIndex)
-                    .take(rowCount)
-                    .toList();
+            controller.charactersList
+                .skip(startIndex)
+                .take(rowCount)
+                .toList();
             return Column(
               children:
-                  columnItems.map((item) {
-                    final emoji = item.emoji ?? "";
-                    final name = item.name ?? "";
-                    return Padding(
-                      padding: EdgeInsets.symmetric(
-                        vertical: 4.w,
-                        horizontal: 4.w,
-                      ),
-                      child: Container(
-                        padding: EdgeInsets.symmetric(
-                          horizontal: 12.w,
-                          vertical: 6.w,
-                        ),
-                        decoration: ShapeDecoration(
-                          color: Colors.white,
-                          shape: RoundedRectangleBorder(
-                            side: BorderSide(
-                              width: 1.w,
-                              color: const Color(0xFFF4F1FF),
-                            ),
-                            borderRadius: BorderRadius.circular(31.r),
-                          ),
-                        ),
-                        child: Text(
-                          "$emoji$name",
-                          style: TextStyle(
-                            color: Colors.black.withAlpha(204),
-                            fontSize: 13.sp,
-                            fontWeight: FontWeight.w400,
-                          ),
+              columnItems.map((item) {
+                final emoji = item.emoji ?? "";
+                final name = item.name ?? "";
+                return Padding(
+                  padding: EdgeInsets.symmetric(
+                    vertical: 4.w,
+                    horizontal: 4.w,
+                  ),
+                  child: Container(
+                    padding: EdgeInsets.symmetric(
+                      horizontal: 12.w,
+                      vertical: 6.w,
+                    ),
+                    decoration: ShapeDecoration(
+                      color: Colors.white,
+                      shape: RoundedRectangleBorder(
+                        side: BorderSide(
+                          width: 1.w,
+                          color: const Color(0xFFF4F1FF),
                         ),
+                        borderRadius: BorderRadius.circular(31.r),
+                      ),
+                    ),
+                    child: Text(
+                      "$emoji$name",
+                      style: TextStyle(
+                        color: Colors.black.withAlpha(204),
+                        fontSize: 13.sp,
+                        fontWeight: FontWeight.w400,
                       ),
-                    );
-                  }).toList(),
+                    ),
+                  ),
+                );
+              }).toList(),
             );
           },
         ),
@@ -419,30 +424,30 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
       width: 328.w,
       padding: EdgeInsets.symmetric(horizontal: 16.w),
       decoration:
-          isSelected
-              ? BoxDecoration(
-                borderRadius: BorderRadius.circular(16.w),
-                image: DecorationImage(
-                  image: Assets.images.bgNewDiscountItemSelect.provider(),
-                  fit: BoxFit.fill,
-                ),
-              )
-              : BoxDecoration(
-                borderRadius: BorderRadius.circular(16.w),
-                image: DecorationImage(
-                  image: Assets.images.bgNewDiscountItemUnselect.provider(),
-                  fit: BoxFit.fill,
-                ),
-              ),
+      isSelected
+          ? BoxDecoration(
+        borderRadius: BorderRadius.circular(16.w),
+        image: DecorationImage(
+          image: Assets.images.bgNewDiscountItemSelect.provider(),
+          fit: BoxFit.fill,
+        ),
+      )
+          : BoxDecoration(
+        borderRadius: BorderRadius.circular(16.w),
+        image: DecorationImage(
+          image: Assets.images.bgNewDiscountItemUnselect.provider(),
+          fit: BoxFit.fill,
+        ),
+      ),
       child: Row(
         children: [
           Text(
             "¥",
             style: TextStyle(
               color:
-                  isSelected
-                      ? const Color(0xFFFF684E)
-                      : Colors.black.withAlpha(204),
+              isSelected
+                  ? const Color(0xFFFF684E)
+                  : Colors.black.withAlpha(204),
               fontSize: 16.sp,
               fontWeight: FontWeight.w700,
             ),
@@ -454,9 +459,9 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
             textAlign: TextAlign.center,
             style: TextStyle(
               color:
-                  isSelected
-                      ? const Color(0xFFFF684E)
-                      : Colors.black.withAlpha(204),
+              isSelected
+                  ? const Color(0xFFFF684E)
+                  : Colors.black.withAlpha(204),
               fontSize: 29.sp,
               fontWeight: FontWeight.w700,
             ),
@@ -677,27 +682,27 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
               controller.isAgree.value = !controller.isAgree.value;
             },
             child:
-                controller.isAgree.value
-                    ? Assets.images.iconStoreAgreePrivacy.image(
-                      width: 16.w,
-                      height: 16.w,
-                    )
-                    : SizedBox(
-                      child: Container(
-                        padding: EdgeInsets.all(1.w),
-                        width: 16.w,
-                        height: 16.w,
-                        child: Container(
-                          decoration: BoxDecoration(
-                            shape: BoxShape.circle,
-                            border: Border.all(
-                              color: Colors.black.withAlpha(153),
-                              width: 1.w,
-                            ),
-                          ),
-                        ),
-                      ),
+            controller.isAgree.value
+                ? Assets.images.iconStoreAgreePrivacy.image(
+              width: 16.w,
+              height: 16.w,
+            )
+                : SizedBox(
+              child: Container(
+                padding: EdgeInsets.all(1.w),
+                width: 16.w,
+                height: 16.w,
+                child: Container(
+                  decoration: BoxDecoration(
+                    shape: BoxShape.circle,
+                    border: Border.all(
+                      color: Colors.black.withAlpha(153),
+                      width: 1.w,
                     ),
+                  ),
+                ),
+              ),
+            ),
           );
         }),
         Text.rich(
@@ -748,14 +753,12 @@ class NewDiscountPage extends BasePage<NewDiscountController> {
         children: [
           Text('购买须知', style: Styles.getTextStyleBlack204W400(12.sp)),
           SizedBox(height: 8.h),
-          Text(
-            "1.会员权益将在购买成功后自动生效,如遇延迟,请耐心等待5-10分钟。若长时间未生效,请联系客服处理;\n"
-            "2.本服务为虚拟商品,一经购买成功即视为使用,恕不支持退款或转让,感谢您的理解;\n"
-            "3.您的支持是我们持续优化与服务的动力,我们将竭诚为您提供更好的体验;\n"
-            "4.相关细则以《会员服务协议》为准,在法律允许范围内,我们保留最终解释权。开通即视为同意协议条款,请谨慎购买。\n"
-            "如有疑问,欢迎随时咨询在线客服!",
-            style: Styles.getTextStyleBlack153W400(10.sp),
-          ),
+          Obx(() {
+            return Text(
+              controller.configRepository.memberTips.value,
+              style: Styles.getTextStyleBlack153W400(10.sp),
+            );
+          }),
         ],
       ),
     );

+ 6 - 0
lib/module/store/store_controller.dart

@@ -7,9 +7,11 @@ import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
 import 'package:injectable/injectable.dart';
 import 'package:keyboard/base/base_controller.dart';
+import 'package:keyboard/data/api/response/config_response.dart';
 import 'package:keyboard/data/bean/pay_way_info.dart';
 import 'package:keyboard/data/bean/goods_info.dart';
 import 'package:keyboard/data/repository/account_repository.dart';
+import 'package:keyboard/data/repository/characters_repository.dart';
 import 'package:keyboard/data/repository/store_repository.dart';
 import 'package:keyboard/dialog/login/login_dialog.dart';
 import 'package:keyboard/dialog/payment_fail_dialog.dart';
@@ -29,6 +31,7 @@ import '../../data/bean/wechat_payment_sign_bean.dart';
 import '../../data/consts/error_code.dart';
 import '../../data/consts/event_report.dart';
 import '../../data/consts/payment_type.dart';
+import '../../data/repository/config_repository.dart';
 import '../../dialog/alipay_qr_code_dialog.dart';
 import '../../dialog/loading_dialog.dart';
 import '../../dialog/member_agreement_dialog.dart';
@@ -53,6 +56,8 @@ class StoreController extends BaseController implements PaymentStatusCallback {
 
   final PaymentStatusManager paymentStatusManager;
 
+  final ConfigRepository configRepository ;
+
   final RxList<GoodsInfo> goodsInfoList = <GoodsInfo>[].obs;
 
   final Rxn<GoodsInfo> _selectedGoodsInfoItem = Rxn<GoodsInfo>();
@@ -132,6 +137,7 @@ class StoreController extends BaseController implements PaymentStatusCallback {
     this.storeRepository,
     this.accountRepository,
     this.paymentStatusManager,
+      this.configRepository,
   );
 
   onBannerChanged(int index, CarouselPageChangedReason reason) {

+ 135 - 133
lib/module/store/store_page.dart

@@ -98,13 +98,13 @@ class StorePage extends BasePage<StoreController> {
                     SizedBox(width: 8.w),
                     controller.isLogin
                         ? Assets.images.iconMineUserLogged.image(
-                          width: 28.w,
-                          height: 28.w,
-                        )
+                      width: 28.w,
+                      height: 28.w,
+                    )
                         : Assets.images.iconMineUserNoLogin.image(
-                          width: 28.w,
-                          height: 28.w,
-                        ),
+                      width: 28.w,
+                      height: 28.w,
+                    ),
                   ],
                 ),
               );
@@ -222,17 +222,17 @@ class StorePage extends BasePage<StoreController> {
           Obx(() {
             return Column(
               children:
-                  controller.filteredGoodsList.map((item) {
-                    return Obx(() {
-                      return GestureDetector(
-                        onTap: () => controller.onGoodsItemClick(item),
-                        child: _buildGoodsItem(
-                          item,
-                          controller.selectedGoodsInfoItem?.id == item.id,
-                        ),
-                      );
-                    });
-                  }).toList(),
+              controller.filteredGoodsList.map((item) {
+                return Obx(() {
+                  return GestureDetector(
+                    onTap: () => controller.onGoodsItemClick(item),
+                    child: _buildGoodsItem(
+                      item,
+                      controller.selectedGoodsInfoItem?.id == item.id,
+                    ),
+                  );
+                });
+              }).toList(),
             );
           }),
           _buildPayWayCard(),
@@ -304,9 +304,9 @@ class StorePage extends BasePage<StoreController> {
           begin: Alignment(0.77, -0.00),
           end: Alignment(0.77, 1.00),
           colors:
-              isSelected
-                  ? [const Color(0xFFFF9416), const Color(0xFFFF7813)]
-                  : [const Color(0xFFFEE057), const Color(0xFFFFC400)],
+          isSelected
+              ? [const Color(0xFFFF9416), const Color(0xFFFF7813)]
+              : [const Color(0xFFFEE057), const Color(0xFFFFC400)],
         ),
         shape: RoundedRectangleBorder(
           borderRadius: BorderRadius.circular(10.r),
@@ -319,16 +319,16 @@ class StorePage extends BasePage<StoreController> {
             height: 70.h,
             decoration: ShapeDecoration(
               gradient:
-                  isSelected
-                      ? LinearGradient(
-                        begin: Alignment(-0.06, 0.50),
-                        end: Alignment(1.14, 0.50),
-                        colors: [
-                          const Color(0xFFFFF895),
-                          const Color(0xFFFFE941),
-                        ],
-                      )
-                      : null,
+              isSelected
+                  ? LinearGradient(
+                begin: Alignment(-0.06, 0.50),
+                end: Alignment(1.14, 0.50),
+                colors: [
+                  const Color(0xFFFFF895),
+                  const Color(0xFFFFE941),
+                ],
+              )
+                  : null,
               color: isSelected ? null : const Color(0xFFFFFDEE),
               shape: RoundedRectangleBorder(
                 side: BorderSide(width: 1, color: const Color(0xFFFEE86B)),
@@ -429,25 +429,25 @@ class StorePage extends BasePage<StoreController> {
                 Text(
                   item.name,
                   style:
-                      isSelected
-                          ? Styles.getTextStyleFFECBBW500(15.sp)
-                          : Styles.getTextStyleFF663300W500(15.sp),
+                  isSelected
+                      ? Styles.getTextStyleFFECBBW500(15.sp)
+                      : Styles.getTextStyleFF663300W500(15.sp),
                 ),
                 Container(
                   padding: EdgeInsets.symmetric(horizontal: 8.w),
                   decoration: ShapeDecoration(
                     color: isSelected ? const Color(0xFFFFECBB) : null,
                     gradient:
-                        isSelected
-                            ? null
-                            : LinearGradient(
-                              begin: Alignment(0.77, -0.00),
-                              end: Alignment(0.77, 1.00),
-                              colors: [
-                                const Color(0xFFFF9416),
-                                const Color(0xFFFF7813),
-                              ],
-                            ),
+                    isSelected
+                        ? null
+                        : LinearGradient(
+                      begin: Alignment(0.77, -0.00),
+                      end: Alignment(0.77, 1.00),
+                      colors: [
+                        const Color(0xFFFF9416),
+                        const Color(0xFFFF7813),
+                      ],
+                    ),
                     shape: RoundedRectangleBorder(
                       borderRadius: BorderRadius.circular(
                         isSelected ? 17.r : 10.r,
@@ -458,9 +458,9 @@ class StorePage extends BasePage<StoreController> {
                     '¥${item.amountText}',
                     textAlign: TextAlign.center,
                     style:
-                        isSelected
-                            ? Styles.getTextStyleFF7F14W500(12.sp)
-                            : Styles.getTextStyleWhiteW500(12.sp),
+                    isSelected
+                        ? Styles.getTextStyleFF7F14W500(12.sp)
+                        : Styles.getTextStyleWhiteW500(12.sp),
                   ),
                 ),
               ],
@@ -534,12 +534,12 @@ class StorePage extends BasePage<StoreController> {
             ),
 
             items:
-                controller.bannerList.map((item) {
-                  return item.banner.image(
-                    width: double.infinity,
-                    fit: BoxFit.cover,
-                  );
-                }).toList(),
+            controller.bannerList.map((item) {
+              return item.banner.image(
+                width: double.infinity,
+                fit: BoxFit.cover,
+              );
+            }).toList(),
           ),
           Positioned(bottom: 0, left: 0, right: 0, child: _buildIndicator()),
         ],
@@ -561,57 +561,61 @@ class StorePage extends BasePage<StoreController> {
       child: Row(
         mainAxisAlignment: MainAxisAlignment.spaceAround,
         children:
-            controller.bannerList.asMap().entries.map((entry) {
-              return Obx(() {
-                final isSelectedBanner =
-                    controller.currentBannerIndex == entry.key;
-                return Row(
-                  mainAxisAlignment: MainAxisAlignment.spaceAround,
-                  children: [
-                    GestureDetector(
-                      onTap:
-                          () => controller.carouselSliderController
-                              .animateToPage(entry.key),
-                      child: SizedBox(
-                        width: 100.w,
-                        child: Stack(
-                          alignment: Alignment.center,
-                          clipBehavior: Clip.none,
-                          children: [
-                            if (isSelectedBanner)
-                              Positioned(
-                                top: -8.h,
-                                child: controller
-                                    .bannerList[entry.key]
-                                    .indicatorImg
-                                    .image(
-                                      width: 100.w,
-                                      height: 40.h,
-                                      fit: BoxFit.fill,
-                                    ),
-                              )
-                            else
-                              Text(
-                                controller.bannerList[entry.key].unSelectedDesc,
-                                style: Styles.getTextStyleWhiteW400(14.sp),
-                              ),
-                          ],
-                        ),
-                      ),
+        controller.bannerList
+            .asMap()
+            .entries
+            .map((entry) {
+          return Obx(() {
+            final isSelectedBanner =
+                controller.currentBannerIndex == entry.key;
+            return Row(
+              mainAxisAlignment: MainAxisAlignment.spaceAround,
+              children: [
+                GestureDetector(
+                  onTap:
+                      () =>
+                      controller.carouselSliderController
+                          .animateToPage(entry.key),
+                  child: SizedBox(
+                    width: 100.w,
+                    child: Stack(
+                      alignment: Alignment.center,
+                      clipBehavior: Clip.none,
+                      children: [
+                        if (isSelectedBanner)
+                          Positioned(
+                            top: -8.h,
+                            child: controller
+                                .bannerList[entry.key]
+                                .indicatorImg
+                                .image(
+                              width: 100.w,
+                              height: 40.h,
+                              fit: BoxFit.fill,
+                            ),
+                          )
+                        else
+                          Text(
+                            controller.bannerList[entry.key].unSelectedDesc,
+                            style: Styles.getTextStyleWhiteW400(14.sp),
+                          ),
+                      ],
                     ),
-                    if (entry.key != controller.bannerList.length - 1)
-                      Padding(
-                        padding: EdgeInsets.only(left: 4.w),
-                        child: Assets.images.iconStoreDivider.image(
-                          width: 2.w,
-                          height: 17.h,
-                          fit: BoxFit.fill,
-                        ),
-                      ),
-                  ],
-                );
-              });
-            }).toList(),
+                  ),
+                ),
+                if (entry.key != controller.bannerList.length - 1)
+                  Padding(
+                    padding: EdgeInsets.only(left: 4.w),
+                    child: Assets.images.iconStoreDivider.image(
+                      width: 2.w,
+                      height: 17.h,
+                      fit: BoxFit.fill,
+                    ),
+                  ),
+              ],
+            );
+          });
+        }).toList(),
       ),
     );
   }
@@ -679,9 +683,9 @@ class StorePage extends BasePage<StoreController> {
                         ),
                         child: Column(
                           children:
-                              controller.userReviewsList.map((item) {
-                                return _buildReviewsItem(item);
-                              }).toList(),
+                          controller.userReviewsList.map((item) {
+                            return _buildReviewsItem(item);
+                          }).toList(),
                         ),
                       ),
                     ],
@@ -757,14 +761,12 @@ class StorePage extends BasePage<StoreController> {
         children: [
           Text('购买须知', style: Styles.getTextStyleFF663300W400(12.sp)),
           SizedBox(height: 8.h),
-          Text(
-            "1.会员权益将在购买成功后自动生效,如遇延迟,请耐心等待5-10分钟。若长时间未生效,请联系客服处理;\n"
-            "2.本服务为虚拟商品,一经购买成功即视为使用,恕不支持退款或转让,感谢您的理解;\n"
-            "3.您的支持是我们持续优化与服务的动力,我们将竭诚为您提供更好的体验;\n"
-            "4.相关细则以《会员服务协议》为准,在法律允许范围内,我们保留最终解释权。开通即视为同意协议条款,请谨慎购买。\n"
-            "如有疑问,欢迎随时咨询在线客服!",
-            style: Styles.getTextStyle99673300W400(10.sp),
-          ),
+          Obx(() {
+            return Text(
+              controller.configRepository.memberTips.value,
+              style: Styles.getTextStyle99673300W400(10.sp),
+            );
+          }),
           SizedBox(height: 150.h),
         ],
       ),
@@ -853,27 +855,27 @@ class StorePage extends BasePage<StoreController> {
             child: Padding(
               padding: EdgeInsets.symmetric(vertical: 10.w, horizontal: 10.w),
               child:
-                  controller.isAgree.value
-                      ? Assets.images.iconStoreAgreePrivacy.image(
-                        width: 16.w,
-                        height: 16.w,
-                      )
-                      : SizedBox(
-                        child: Container(
-                          padding: EdgeInsets.all(1.w),
-                          width: 16.w,
-                          height: 16.w,
-                          child: Container(
-                            decoration: BoxDecoration(
-                              shape: BoxShape.circle,
-                              border: Border.all(
-                                color: Colors.black.withAlpha(153),
-                                width: 1.w,
-                              ),
-                            ),
-                          ),
-                        ),
+              controller.isAgree.value
+                  ? Assets.images.iconStoreAgreePrivacy.image(
+                width: 16.w,
+                height: 16.w,
+              )
+                  : SizedBox(
+                child: Container(
+                  padding: EdgeInsets.all(1.w),
+                  width: 16.w,
+                  height: 16.w,
+                  child: Container(
+                    decoration: BoxDecoration(
+                      shape: BoxShape.circle,
+                      border: Border.all(
+                        color: Colors.black.withAlpha(153),
+                        width: 1.w,
                       ),
+                    ),
+                  ),
+                ),
+              ),
             ),
           );
         }),