|
|
@@ -83,13 +83,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,
|
|
|
+ ),
|
|
|
],
|
|
|
),
|
|
|
);
|
|
|
@@ -176,7 +176,6 @@ class StorePage extends BasePage<StoreController> {
|
|
|
}
|
|
|
|
|
|
Widget _buildGoodsCard() {
|
|
|
-
|
|
|
return Container(
|
|
|
margin: EdgeInsets.symmetric(horizontal: 16.w),
|
|
|
padding: EdgeInsets.only(
|
|
|
@@ -204,17 +203,17 @@ class StorePage extends BasePage<StoreController> {
|
|
|
Obx(() {
|
|
|
return Column(
|
|
|
children:
|
|
|
- controller.goodsInfoList.map((item) {
|
|
|
- return Obx(() {
|
|
|
- return GestureDetector(
|
|
|
- onTap: () => controller.onGoodsItemClick(item),
|
|
|
- child: _buildGoodsItem(
|
|
|
- item,
|
|
|
- controller.selectedGoodsInfoItem?.id == item.id,
|
|
|
- ),
|
|
|
- );
|
|
|
- });
|
|
|
- }).toList(),
|
|
|
+ controller.goodsInfoList.map((item) {
|
|
|
+ return Obx(() {
|
|
|
+ return GestureDetector(
|
|
|
+ onTap: () => controller.onGoodsItemClick(item),
|
|
|
+ child: _buildGoodsItem(
|
|
|
+ item,
|
|
|
+ controller.selectedGoodsInfoItem?.id == item.id,
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ });
|
|
|
+ }).toList(),
|
|
|
);
|
|
|
}),
|
|
|
_buildPayWayCard(),
|
|
|
@@ -286,9 +285,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),
|
|
|
@@ -301,16 +300,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)),
|
|
|
@@ -398,25 +397,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,
|
|
|
@@ -427,9 +426,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),
|
|
|
),
|
|
|
),
|
|
|
],
|
|
|
@@ -468,7 +467,12 @@ class StorePage extends BasePage<StoreController> {
|
|
|
),
|
|
|
],
|
|
|
),
|
|
|
- child: Text("*选中商品时展示文案", style: Styles.getTextStyle99673300W400(12.sp)),
|
|
|
+ child: Obx(() {
|
|
|
+ return Text(
|
|
|
+ controller.selectedGoodsInfoItem?.selectDesc ?? "",
|
|
|
+ style: Styles.getTextStyle99673300W400(12.sp),
|
|
|
+ );
|
|
|
+ }),
|
|
|
);
|
|
|
}
|
|
|
|
|
|
@@ -497,12 +501,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()),
|
|
|
],
|
|
|
@@ -524,57 +528,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(),
|
|
|
),
|
|
|
);
|
|
|
}
|
|
|
@@ -642,9 +650,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(),
|
|
|
),
|
|
|
),
|
|
|
],
|
|
|
@@ -722,11 +730,11 @@ class StorePage extends BasePage<StoreController> {
|
|
|
SizedBox(height: 8.h),
|
|
|
Text(
|
|
|
"1. 本产品为互联网技术服务虚拟产品,会员购买成功立即生效,一经开通不支持退款。\n"
|
|
|
- "2. 本产品为付费会员制产品,会员费用是指开通平台所有功能使用权限的基础费用。开通权限后,部分功能可能会免费(具体以实际展示情况为准)使用,部分功能需消耗一定的虚拟币(金币)方可使用。\n"
|
|
|
- "3. 各种功能的金币消耗可参考虚拟币规则(金币中心)。\n"
|
|
|
- "4. 开通会员后,若赠送虚拟币(金币)消耗完毕,可单独购买金币。\n"
|
|
|
- "5. 根据业务情况,我方有权调整不同功能的虚拟币消耗价格,价格会在最新的金币中心展示。\n"
|
|
|
- "6. 请在购买前仔细阅读《会员服务协议》和购买须知,确定您同意所有条款后继续操作。",
|
|
|
+ "2. 本产品为付费会员制产品,会员费用是指开通平台所有功能使用权限的基础费用。开通权限后,部分功能可能会免费(具体以实际展示情况为准)使用,部分功能需消耗一定的虚拟币(金币)方可使用。\n"
|
|
|
+ "3. 各种功能的金币消耗可参考虚拟币规则(金币中心)。\n"
|
|
|
+ "4. 开通会员后,若赠送虚拟币(金币)消耗完毕,可单独购买金币。\n"
|
|
|
+ "5. 根据业务情况,我方有权调整不同功能的虚拟币消耗价格,价格会在最新的金币中心展示。\n"
|
|
|
+ "6. 请在购买前仔细阅读《会员服务协议》和购买须知,确定您同意所有条款后继续操作。",
|
|
|
style: Styles.getTextStyle99673300W400(10.sp),
|
|
|
),
|
|
|
SizedBox(height: 120.h),
|
|
|
@@ -758,33 +766,34 @@ class StorePage extends BasePage<StoreController> {
|
|
|
),
|
|
|
child: Column(
|
|
|
children: [
|
|
|
- GestureDetector(
|
|
|
- onTap: controller.clickPayNow,
|
|
|
- child: Container(
|
|
|
- width: 328.w,
|
|
|
- height: 54.h,
|
|
|
- decoration: ShapeDecoration(
|
|
|
- gradient: LinearGradient(
|
|
|
- begin: Alignment(0.60, -0.39),
|
|
|
- end: Alignment(0.60, 0.95),
|
|
|
- colors: [
|
|
|
- const Color(0xFFF95FAC),
|
|
|
- const Color(0xFFFD5E4D),
|
|
|
- const Color(0xFFFD5E4D),
|
|
|
- const Color(0xFFFB8A3C),
|
|
|
- ],
|
|
|
- ),
|
|
|
- shape: RoundedRectangleBorder(
|
|
|
- borderRadius: BorderRadius.circular(30.55.r),
|
|
|
- ),
|
|
|
- ),
|
|
|
- child: Center(
|
|
|
- child: Text(
|
|
|
- StringName.storePayNow,
|
|
|
- style: Styles.getTextStyleWhiteW500(17.sp),
|
|
|
+ GestureDetector(
|
|
|
+ onTap: controller.clickPayNow,
|
|
|
+ child: Container(
|
|
|
+ width: 328.w,
|
|
|
+ height: 54.h,
|
|
|
+ decoration: ShapeDecoration(
|
|
|
+ gradient: LinearGradient(
|
|
|
+ begin: Alignment(0.60, -0.39),
|
|
|
+ end: Alignment(0.60, 0.95),
|
|
|
+ colors: [
|
|
|
+ const Color(0xFFF95FAC),
|
|
|
+ const Color(0xFFFD5E4D),
|
|
|
+ const Color(0xFFFD5E4D),
|
|
|
+ const Color(0xFFFB8A3C),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ shape: RoundedRectangleBorder(
|
|
|
+ borderRadius: BorderRadius.circular(30.55.r),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ child: Center(
|
|
|
+ child: Text(
|
|
|
+ StringName.storePayNow,
|
|
|
+ style: Styles.getTextStyleWhiteW500(17.sp),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
),
|
|
|
),
|
|
|
- ),),
|
|
|
SizedBox(height: 11.h),
|
|
|
Row(
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
@@ -796,27 +805,27 @@ class StorePage extends BasePage<StoreController> {
|
|
|
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(
|