ソースを参照

fix:会员添加点击逻辑。

“HeShaoZe” 4 ヶ月 前
コミット
0bf2e99b90

BIN
assets/images/icon_member_ordinary_product_normal.webp


BIN
assets/images/icon_member_ordinary_product_select.webp


BIN
assets/images/icon_member_special_products_normal.webp


BIN
assets/images/icon_member_special_products_select.webp


+ 8 - 8
lib/di/get_it.config.dart

@@ -57,14 +57,14 @@ extension GetItInjectableX on _i174.GetIt {
       environmentFilter,
     );
     final networkModule = _$NetworkModule();
+    gh.factory<_i973.SplashController>(() => _i973.SplashController());
+    gh.factory<_i756.TrackDetailController>(
+        () => _i756.TrackDetailController());
     gh.factory<_i256.AboutController>(() => _i256.AboutController());
-    gh.factory<_i923.BrowserController>(() => _i923.BrowserController());
     gh.factory<_i769.FeedBackController>(() => _i769.FeedBackController());
+    gh.factory<_i923.BrowserController>(() => _i923.BrowserController());
     gh.factory<_i108.PermissionSettingController>(
         () => _i108.PermissionSettingController());
-    gh.factory<_i973.SplashController>(() => _i973.SplashController());
-    gh.factory<_i756.TrackDetailController>(
-        () => _i756.TrackDetailController());
     gh.singleton<_i361.Dio>(() => networkModule.createDefaultDio());
     gh.lazySingleton<_i220.AtmobLocationClient>(
         () => _i220.AtmobLocationClient());
@@ -78,10 +78,10 @@ extension GetItInjectableX on _i174.GetIt {
         .provideAtmobStreamApi(gh<_i361.Dio>(instanceName: 'stream')));
     gh.lazySingleton<_i20.AccountRepository>(
         () => _i20.AccountRepository(gh<_i243.AtmobApi>()));
-    gh.lazySingleton<_i850.ContactRepository>(
-        () => _i850.ContactRepository(gh<_i243.AtmobApi>()));
     gh.lazySingleton<_i1053.FriendsRepository>(
         () => _i1053.FriendsRepository(gh<_i243.AtmobApi>()));
+    gh.lazySingleton<_i850.ContactRepository>(
+        () => _i850.ContactRepository(gh<_i243.AtmobApi>()));
     gh.lazySingleton<_i791.MessageRepository>(
         () => _i791.MessageRepository(gh<_i243.AtmobApi>()));
     gh.lazySingleton<_i983.UrgentContactRepository>(
@@ -117,10 +117,10 @@ extension GetItInjectableX on _i174.GetIt {
               gh<_i983.UrgentContactRepository>(),
               gh<_i20.AccountRepository>(),
             ));
-    gh.factory<_i897.AddFriendDialogController>(
-        () => _i897.AddFriendDialogController(gh<_i1053.FriendsRepository>()));
     gh.factory<_i492.FriendSettingController>(
         () => _i492.FriendSettingController(gh<_i1053.FriendsRepository>()));
+    gh.factory<_i897.AddFriendDialogController>(
+        () => _i897.AddFriendDialogController(gh<_i1053.FriendsRepository>()));
     gh.lazySingleton<_i814.MemberRepository>(() => _i814.MemberRepository(
           gh<_i243.AtmobApi>(),
           gh<_i20.AccountRepository>(),

+ 219 - 113
lib/module/member/member_page.dart

@@ -15,6 +15,7 @@ import 'package:location/resource/colors.gen.dart';
 import 'package:location/utils/common_expand.dart';
 import 'package:location/utils/project_expand.dart';
 import 'package:location/widget/auto_scroll_list_view.dart';
+import '../../data/bean/goods_bean.dart';
 import '../../data/bean/member_status_info.dart';
 import '../../data/bean/pay_item_bean.dart';
 import '../../data/consts/payment_type.dart';
@@ -238,123 +239,228 @@ class MemberPage extends BasePage<MemberController> {
 
   Widget buildGoodsList() {
     return Obx(() {
-      return SizedBox(
-        height: 123.w,
-        child: ListView.builder(
-            padding: EdgeInsets.only(left: 12.w),
-            physics: const BouncingScrollPhysics(
-                parent: AlwaysScrollableScrollPhysics()),
-            scrollDirection: Axis.horizontal,
-            itemBuilder: (BuildContext ctx, int index) {
-              return Obx(() {
-                final item = controller.goodsList[index];
-                bool isSelected = controller.selectedGoods?.id == item.id;
-                return GestureDetector(
-                  behavior: HitTestBehavior.translucent,
-                  onTap: () => controller.onGoodsItemClick(item),
-                  child: Container(
-                      margin: EdgeInsets.only(right: 10.w),
-                      width: 138.w,
-                      height: 123.w,
-                      child: Stack(
-                        children: [
-                          Container(
-                            width: double.infinity,
-                            height: double.infinity,
-                            decoration: BoxDecoration(
-                                color: isSelected
-                                    ? '#6BC4BAFF'.color
-                                    : ColorName.white20,
-                                borderRadius: BorderRadius.circular(18.w),
-                                border: Border.all(
-                                    color: isSelected
-                                        ? '#C4BAFF'.color
-                                        : '#E8E8E8'.color,
-                                    width: 3.w)),
-                            padding: EdgeInsets.only(left: 10.w),
-                            child: Column(
-                              crossAxisAlignment: CrossAxisAlignment.start,
-                              children: [
-                                Spacer(flex: 2),
-                                Text(
-                                  item.name,
-                                  style: TextStyle(
-                                      fontSize: 14.sp,
-                                      color: ColorName.black90,
-                                      fontWeight: FontWeight.bold),
-                                ),
-                                SizedBox(height: 3.w),
-                                Text('¥${item.originalAmount.divideBy100()}',
-                                    style: TextStyle(
-                                        decoration: TextDecoration.lineThrough,
-                                        fontSize: 10.sp,
-                                        color: ColorName.black60)),
-                                Spacer(flex: 1),
-                                RichText(
-                                    text: TextSpan(
-                                        style: TextStyle(
-                                            color: isSelected
-                                                ? '#EA1231'.color
-                                                : ColorName.black80,
-                                            fontWeight: FontWeight.bold),
-                                        children: [
-                                      TextSpan(
-                                          text: '¥',
-                                          style: TextStyle(
-                                              fontSize: 20.sp, height: 1)),
-                                      TextSpan(
-                                          text: item.amount.divideBy100(),
-                                          style: TextStyle(
-                                              fontSize: 34.sp,
-                                              height: 1,
-                                              fontFamily: FontFamily.oppoSans))
-                                    ])),
-                                Padding(
-                                  padding: EdgeInsets.only(left: 7.w),
-                                  child: Text(item.description ?? '',
-                                      style: TextStyle(
-                                          fontSize: 12.sp,
-                                          color: ColorName.black40)),
-                                ),
-                                Spacer(
-                                  flex: 1,
-                                )
-                              ],
-                            ),
-                          ),
-                          Visibility(
-                              visible: item.tag?.isNotEmpty == true,
-                              child: Positioned(
-                                top: 0,
-                                right: 0,
-                                child: Container(
-                                  decoration: BoxDecoration(
-                                      gradient: LinearGradient(colors: [
-                                        '#A26CFF'.color,
-                                        '#FF7CD8'.color,
-                                        '#898BFF'.color
-                                      ]),
-                                      borderRadius: BorderRadius.only(
-                                          topRight: Radius.circular(11.w),
-                                          bottomLeft: Radius.circular(11.w))),
-                                  padding: EdgeInsets.symmetric(
-                                      horizontal: 10.w, vertical: 4.w),
-                                  child: Text(item.tag ?? '',
-                                      style: TextStyle(
-                                          fontSize: 12.sp,
-                                          color: Colors.white)),
-                                ),
-                              ))
-                        ],
-                      )),
-                );
-              });
-            },
-            itemCount: controller.goodsList.length),
+      if (controller.goodsList.isEmpty) {
+        return Container();
+      }
+      if (controller.goodsList.length == 1) {
+        return Container(
+          padding: EdgeInsets.symmetric(horizontal: 14.w),
+          //height: 165.w,
+          child: Column(
+            children: [
+              _createSpecialProduct(controller.goodsList.first)
+            ],
+          ),
+        );
+      } else if (controller.goodsList.length == 2) {
+        return Container(
+          padding: EdgeInsets.symmetric(horizontal: 14.w),
+          //height: 165.w,
+          child: Column(
+            children: [
+              Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  Expanded(child: _ordinaryProductWidget(controller.goodsList.first)),
+                  SizedBox(width: 8,),
+                  Expanded(child: _ordinaryProductWidget(controller.goodsList[1]))
+                ],
+              )
+            ],
+          ),
+        );
+      }
+      return Container(
+        padding: EdgeInsets.symmetric(horizontal: 14.w),
+        //height: 165.w,
+        child: Column(
+          children: [
+            _createSpecialProduct(controller.goodsList.first),
+            SizedBox(height: 7.w,),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              children: [
+                Expanded(child: _ordinaryProductWidget(controller.goodsList[1])),
+                SizedBox(width: 8,),
+                Expanded(child: _ordinaryProductWidget(controller.goodsList[2]))
+              ],
+            )
+          ],
+        ),
       );
     });
   }
 
+  //特惠产品
+  Widget _createSpecialProduct(GoodsBean goodsInfo) {
+    bool isSelected = controller.selectedGoods?.id == goodsInfo.id;
+    return GestureDetector(
+      onTap: () {
+        controller.onGoodsItemClick(goodsInfo);
+      },
+      child: Container(
+        height: 96.w,
+        padding: EdgeInsets.only(left: 17.w),
+        decoration: BoxDecoration(
+          image: DecorationImage(
+              image: isSelected ? Assets.images.iconMemberSpecialProductsSelect.provider() : Assets.images.iconMemberSpecialProductsNormal.provider(),
+              fit: BoxFit.cover
+          ),
+        ),
+        child: Column(
+          children: [
+            SizedBox(height: 29.w,),
+            Row(
+              children: [
+                Column(
+                  children: [
+                    RichText(
+                        text: TextSpan(
+                            style: TextStyle(
+                                color: isSelected
+                                    ? '#FF5656'.color
+                                    : "#323133".color,
+                                fontWeight: FontWeight.bold),
+                            children: [
+                              TextSpan(
+                                  text: '¥',
+                                  style: TextStyle(
+                                      fontSize: 16.sp, height: 1)),
+                              TextSpan(
+                                  text: goodsInfo.amount.divideBy100(),
+                                  style: TextStyle(
+                                    fontSize: 28.sp,
+                                    height: 1,
+                                    //fontFamily: FontFamily.oppoSans
+                                  )
+                              )
+                            ]
+                        )
+                    ),
+                    Text('¥${goodsInfo.originalAmount.divideBy100()}',
+                        style: TextStyle(
+                            decoration: TextDecoration.lineThrough,
+                            decorationColor: ColorName.black40,
+                            decorationThickness: 1.0,
+                            fontSize: 12.sp,
+                            color: ColorName.black40))
+                  ],
+                ),
+                SizedBox(width: 22.24.w,),
+                Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    Text(
+                      goodsInfo.name,
+                      style: TextStyle(
+                          fontSize: 17.sp,
+                          color: "#333333".color,
+                          fontWeight: FontWeight.bold),
+                    ),
+                    SizedBox(
+                      height: 3.w,
+                    ),
+                    Text(
+                      goodsInfo.description ?? "",
+                      style: TextStyle(
+                          fontSize: 11.sp ,
+                          color: "#9191BA".color,
+                          fontWeight: FontWeight.bold),
+                    ),
+                  ],
+                ),
+              ],
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  ///普通产品
+  Widget _ordinaryProductWidget(GoodsBean goodsInfo) {
+    bool isSelected = controller.selectedGoods?.id == goodsInfo.id;
+    return GestureDetector(
+      onTap: () {
+        controller.onGoodsItemClick(goodsInfo);
+      },
+      child: Container(
+        height: 62.w,
+        padding: EdgeInsets.only(left: 16.w,right: 12.w),
+        decoration: BoxDecoration(
+          image: DecorationImage(
+              image: isSelected ? Assets.images.iconMemberOrdinaryProductSelect.provider() : Assets.images.iconMemberOrdinaryProductNormal.provider(),
+              fit: BoxFit.cover
+          ),
+        ),
+        child: Column(
+          children: [
+            SizedBox(height: 15.w,),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              children: [
+                Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    Text(
+                      goodsInfo.name,
+                      style: TextStyle(
+                          fontSize: 12.sp,
+                          color: "#333333".color,
+                          fontWeight: FontWeight.bold),
+                    ),
+                    //SizedBox(height: 6.w,),
+                    Text(
+                      goodsInfo.description ?? "",
+                      style: TextStyle(
+                          fontSize: 10.sp ,
+                          color: ColorName.black40,
+                          fontWeight: FontWeight.bold),
+                    ),
+                  ],
+                ),
+                //SizedBox(width: 22.24.w,),
+                Column(
+                  crossAxisAlignment: CrossAxisAlignment.end,
+                  children: [
+                    RichText(
+                        text: TextSpan(
+                            style: TextStyle(
+                                color: isSelected
+                                    ? '#FF5656'.color
+                                    : "#323133".color,
+                                fontWeight: FontWeight.bold),
+                            children: [
+                              TextSpan(
+                                  text: '¥',
+                                  style: TextStyle(
+                                      color: isSelected? "#FF5656".color : ColorName.black80,
+                                      fontSize: 11.sp, height: 1)),
+                              TextSpan(
+                                  text: goodsInfo.amount.divideBy100(),
+                                  style: TextStyle(
+                                    fontSize: 20.sp,
+                                    height: 1,))
+                            ]
+                        )
+                    ),
+                    Text('¥${goodsInfo.originalAmount.divideBy100()}',
+                        style: TextStyle(
+                            decoration: TextDecoration.lineThrough,
+                            decorationColor: ColorName.black30,
+                            decorationThickness: 1.0,
+                            fontSize: 10.sp,
+                            color: ColorName.black30))
+                  ],
+                ),
+              ],
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
   Widget buildMemberBottomView() {
     return Obx(() {
       return Visibility(

+ 20 - 0
lib/resource/assets.gen.dart

@@ -296,6 +296,14 @@ class $AssetsImagesGen {
   AssetGenImage get iconMemberFun6 =>
       const AssetGenImage('assets/images/icon_member_fun_6.webp');
 
+  /// File path: assets/images/icon_member_ordinary_product_normal.webp
+  AssetGenImage get iconMemberOrdinaryProductNormal => const AssetGenImage(
+      'assets/images/icon_member_ordinary_product_normal.webp');
+
+  /// File path: assets/images/icon_member_ordinary_product_select.webp
+  AssetGenImage get iconMemberOrdinaryProductSelect => const AssetGenImage(
+      'assets/images/icon_member_ordinary_product_select.webp');
+
   /// File path: assets/images/icon_member_payment_completed.webp
   AssetGenImage get iconMemberPaymentCompleted =>
       const AssetGenImage('assets/images/icon_member_payment_completed.webp');
@@ -312,6 +320,14 @@ class $AssetsImagesGen {
   AssetGenImage get iconMemberSettlementConfirm =>
       const AssetGenImage('assets/images/icon_member_settlement_confirm.webp');
 
+  /// File path: assets/images/icon_member_special_products_normal.webp
+  AssetGenImage get iconMemberSpecialProductsNormal => const AssetGenImage(
+      'assets/images/icon_member_special_products_normal.webp');
+
+  /// File path: assets/images/icon_member_special_products_select.webp
+  AssetGenImage get iconMemberSpecialProductsSelect => const AssetGenImage(
+      'assets/images/icon_member_special_products_select.webp');
+
   /// File path: assets/images/icon_member_vip_back.webp
   AssetGenImage get iconMemberVipBack =>
       const AssetGenImage('assets/images/icon_member_vip_back.webp');
@@ -657,10 +673,14 @@ class $AssetsImagesGen {
         iconMemberFun3,
         iconMemberFun4,
         iconMemberFun6,
+        iconMemberOrdinaryProductNormal,
+        iconMemberOrdinaryProductSelect,
         iconMemberPaymentCompleted,
         iconMemberRetainClose,
         iconMemberSettlementBg,
         iconMemberSettlementConfirm,
+        iconMemberSpecialProductsNormal,
+        iconMemberSpecialProductsSelect,
         iconMemberVipBack,
         iconMemberVipMiddleBg,
         iconMemberVipMore,