You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1058 lines
39 KiB

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:fluwx/fluwx.dart';
import 'package:huixiang/utils/font_weight.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../generated/l10n.dart';
import '../../retrofit/data/base_data.dart';
import '../../retrofit/data/vip_card_home.dart';
import '../../retrofit/data/wx_pay.dart';
import '../../retrofit/retrofit_api.dart';
import '../../utils/flutter_utils.dart';
import '../../utils/min.dart';
import 'package:tobias/tobias.dart' as tobias;
class VipTop extends StatefulWidget {
final VipCardHome vipCardHome;
1.动态详情,评论-已显示全部—修改; 2.新增加集换卡详情页面; 3.语言-增加部分文本语言并更改; 4.回乡VIP板块更改;原本的VIP卡逻辑暂时不用,换成用户充值200即成为会员,该页面ui调整;(原来逻辑未删减,暂保留不使用) 5.16进制渐变色值的方法,改变亮度暂定统一为95; 6.首页ui调整;邀请好友图片处,原单一图片现更改为轮播效果,新增集换卡引导也放在此处; 7.积分明细页面更改;共用一个页面根据积分跟集换卡的入口,传对应的值,查看对应的数据; 8.积分明细跳转路径更改,新增一个类型带入路径中跳转传入; 9.更改测试版本服务地址; 10.我的页面跟首页更改一致,单一图片改轮播效果; 11.会员中心,会员卡部分更改;将原有写法去掉,重写了会员卡的使用显示,并优化了该页面数据的显示; 12.我的页面,vip等级显示更改; 13.会员卡列表等级接口,实体类新增部分字段;(原定位分数已不用,更改为originScore,后期若用的原字段,需要修改) 14.订单结算页,支付类型更换时queryOrderInfo()接口中。优惠类型做了调整更改;(改修改需要多测试下,尝试多种情况看下,是否有问题;有可能部分情况没有预判到) 15.点单页结算跳转,vipLevelName,vipLevelName字段做了非空判断; 16.UserInfo实体类新增isVip字段;(主要用于查看用户数据是查询该用户是否已是vip卡状态) 17.福利兑换中心页面,我的信息部分ui做调整,新增集换卡数量的显示;
2 years ago
// final Function queryVipHome;
1.动态详情,评论-已显示全部—修改; 2.新增加集换卡详情页面; 3.语言-增加部分文本语言并更改; 4.回乡VIP板块更改;原本的VIP卡逻辑暂时不用,换成用户充值200即成为会员,该页面ui调整;(原来逻辑未删减,暂保留不使用) 5.16进制渐变色值的方法,改变亮度暂定统一为95; 6.首页ui调整;邀请好友图片处,原单一图片现更改为轮播效果,新增集换卡引导也放在此处; 7.积分明细页面更改;共用一个页面根据积分跟集换卡的入口,传对应的值,查看对应的数据; 8.积分明细跳转路径更改,新增一个类型带入路径中跳转传入; 9.更改测试版本服务地址; 10.我的页面跟首页更改一致,单一图片改轮播效果; 11.会员中心,会员卡部分更改;将原有写法去掉,重写了会员卡的使用显示,并优化了该页面数据的显示; 12.我的页面,vip等级显示更改; 13.会员卡列表等级接口,实体类新增部分字段;(原定位分数已不用,更改为originScore,后期若用的原字段,需要修改) 14.订单结算页,支付类型更换时queryOrderInfo()接口中。优惠类型做了调整更改;(改修改需要多测试下,尝试多种情况看下,是否有问题;有可能部分情况没有预判到) 15.点单页结算跳转,vipLevelName,vipLevelName字段做了非空判断; 16.UserInfo实体类新增isVip字段;(主要用于查看用户数据是查询该用户是否已是vip卡状态) 17.福利兑换中心页面,我的信息部分ui做调整,新增集换卡数量的显示;
2 years ago
VipTop(this.vipCardHome);
@override
State<StatefulWidget> createState() {
return _VipTop();
}
}
class _VipTop extends State<VipTop> {
int selectIndex = 0;
ApiService apiService;
var payType = 1;
dynamic payListen;
@override
void initState() {
super.initState();
1.动态详情,评论-已显示全部—修改; 2.新增加集换卡详情页面; 3.语言-增加部分文本语言并更改; 4.回乡VIP板块更改;原本的VIP卡逻辑暂时不用,换成用户充值200即成为会员,该页面ui调整;(原来逻辑未删减,暂保留不使用) 5.16进制渐变色值的方法,改变亮度暂定统一为95; 6.首页ui调整;邀请好友图片处,原单一图片现更改为轮播效果,新增集换卡引导也放在此处; 7.积分明细页面更改;共用一个页面根据积分跟集换卡的入口,传对应的值,查看对应的数据; 8.积分明细跳转路径更改,新增一个类型带入路径中跳转传入; 9.更改测试版本服务地址; 10.我的页面跟首页更改一致,单一图片改轮播效果; 11.会员中心,会员卡部分更改;将原有写法去掉,重写了会员卡的使用显示,并优化了该页面数据的显示; 12.我的页面,vip等级显示更改; 13.会员卡列表等级接口,实体类新增部分字段;(原定位分数已不用,更改为originScore,后期若用的原字段,需要修改) 14.订单结算页,支付类型更换时queryOrderInfo()接口中。优惠类型做了调整更改;(改修改需要多测试下,尝试多种情况看下,是否有问题;有可能部分情况没有预判到) 15.点单页结算跳转,vipLevelName,vipLevelName字段做了非空判断; 16.UserInfo实体类新增isVip字段;(主要用于查看用户数据是查询该用户是否已是vip卡状态) 17.福利兑换中心页面,我的信息部分ui做调整,新增集换卡数量的显示;
2 years ago
// payListen = weChatResponseEventHandler.listen((event) async {
// print("payCallback: ${event.errCode}");
// if (event.errCode == 0) {
// widget.queryVipHome();
// SmartDialog.showToast("支付成功", alignment: Alignment.center);
// } else {
// SmartDialog.showToast("支付失败", alignment: Alignment.center);
// return;
// }
// });
}
rechargeVIP() async {
if (apiService == null) {
SharedPreferences value = await SharedPreferences.getInstance();
apiService = ApiService(Dio(),
context: context, token: value.getString("token"), showLoading: true);
}
BaseData<dynamic> baseData = await apiService.orderVip({
"cardId": widget?.vipCardHome?.cards[selectIndex]?.id,
"type": payType
}).catchError((error) {});
if (baseData != null && baseData.isSuccess) {
if (payType == 1) {
if (Platform.isAndroid) {
if (!(await Min.isInitialize())) {
// 小程序的微信支付和app的充值支付使用同一个WXPayEntryActivity回调,
// 然而充值时小程序未初始化会导致回调内部代码调用getPackage空指针,
// 故而在此初始化一下
await Min.initialize();
}
}
WxPay wxPay = WxPay.fromJson(baseData.data);
await registerWxApi(
appId: wxPay.appId,
doOnAndroid: true,
universalLink: "https://hx.lotus-wallet.com/app/",
);
payWithWeChat(
appId: wxPay.appId,
partnerId: wxPay.partnerId,
prepayId: wxPay.prepayId,
packageValue: wxPay.packageValue,
nonceStr: wxPay.nonceStr,
timeStamp: int.tryParse(wxPay.timeStamp),
sign: wxPay.sign,
);
} else {
tobias.isAliPayInstalled().then((value) => {
// 判断是否安装了支付宝
if (!value)
{SmartDialog.showToast("请安装支付宝", alignment: Alignment.center)}
else
{
tobias.aliPay(baseData.data["body"]).then((payRes) {
if (payRes['resultStatus'] == 9000 ||
payRes['resultStatus'] == '9000') {
1.动态详情,评论-已显示全部—修改; 2.新增加集换卡详情页面; 3.语言-增加部分文本语言并更改; 4.回乡VIP板块更改;原本的VIP卡逻辑暂时不用,换成用户充值200即成为会员,该页面ui调整;(原来逻辑未删减,暂保留不使用) 5.16进制渐变色值的方法,改变亮度暂定统一为95; 6.首页ui调整;邀请好友图片处,原单一图片现更改为轮播效果,新增集换卡引导也放在此处; 7.积分明细页面更改;共用一个页面根据积分跟集换卡的入口,传对应的值,查看对应的数据; 8.积分明细跳转路径更改,新增一个类型带入路径中跳转传入; 9.更改测试版本服务地址; 10.我的页面跟首页更改一致,单一图片改轮播效果; 11.会员中心,会员卡部分更改;将原有写法去掉,重写了会员卡的使用显示,并优化了该页面数据的显示; 12.我的页面,vip等级显示更改; 13.会员卡列表等级接口,实体类新增部分字段;(原定位分数已不用,更改为originScore,后期若用的原字段,需要修改) 14.订单结算页,支付类型更换时queryOrderInfo()接口中。优惠类型做了调整更改;(改修改需要多测试下,尝试多种情况看下,是否有问题;有可能部分情况没有预判到) 15.点单页结算跳转,vipLevelName,vipLevelName字段做了非空判断; 16.UserInfo实体类新增isVip字段;(主要用于查看用户数据是查询该用户是否已是vip卡状态) 17.福利兑换中心页面,我的信息部分ui做调整,新增集换卡数量的显示;
2 years ago
// widget.queryVipHome();
SmartDialog.showToast("支付成功",
alignment: Alignment.center);
} else {
SmartDialog.showToast(payRes['memo'],
alignment: Alignment.center);
}
})
}
});
}
} else {
SmartDialog.showToast(baseData.msg, alignment: Alignment.center);
}
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
height: 246.h,
decoration: BoxDecoration(
color: Color(0xff32A060),
borderRadius: BorderRadius.vertical(
bottom: Radius.circular(8.w),
),
),
),
Container(
child: Column(
children: [
vipCard(),
1.动态详情,评论-已显示全部—修改; 2.新增加集换卡详情页面; 3.语言-增加部分文本语言并更改; 4.回乡VIP板块更改;原本的VIP卡逻辑暂时不用,换成用户充值200即成为会员,该页面ui调整;(原来逻辑未删减,暂保留不使用) 5.16进制渐变色值的方法,改变亮度暂定统一为95; 6.首页ui调整;邀请好友图片处,原单一图片现更改为轮播效果,新增集换卡引导也放在此处; 7.积分明细页面更改;共用一个页面根据积分跟集换卡的入口,传对应的值,查看对应的数据; 8.积分明细跳转路径更改,新增一个类型带入路径中跳转传入; 9.更改测试版本服务地址; 10.我的页面跟首页更改一致,单一图片改轮播效果; 11.会员中心,会员卡部分更改;将原有写法去掉,重写了会员卡的使用显示,并优化了该页面数据的显示; 12.我的页面,vip等级显示更改; 13.会员卡列表等级接口,实体类新增部分字段;(原定位分数已不用,更改为originScore,后期若用的原字段,需要修改) 14.订单结算页,支付类型更换时queryOrderInfo()接口中。优惠类型做了调整更改;(改修改需要多测试下,尝试多种情况看下,是否有问题;有可能部分情况没有预判到) 15.点单页结算跳转,vipLevelName,vipLevelName字段做了非空判断; 16.UserInfo实体类新增isVip字段;(主要用于查看用户数据是查询该用户是否已是vip卡状态) 17.福利兑换中心页面,我的信息部分ui做调整,新增集换卡数量的显示;
2 years ago
// if(widget?.vipCardHome?.cards?.length != 0)
// SizedBox(
// height: 15.h,
// ),
// (!(widget?.vipCardHome?.member?.isVip ?? false))
// ? (widget?.vipCardHome?.cards?.length == 0 ? Container():vipCardList())
// : Padding(
// padding: EdgeInsets.symmetric(horizontal: 16.w),
// child: Row(
// children: [
// Expanded(
// child: Container(
// alignment: Alignment.center,
// padding: EdgeInsets.symmetric(
// horizontal: 10.w, vertical: 15.h),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(4.w),
// color: Color(0xffffffff),
// boxShadow: [
// BoxShadow(
// color: Colors.black.withAlpha(12),
// offset: Offset(0, 3),
// blurRadius: 14,
// spreadRadius: 0,
// )
// ],
// ),
// child: Text.rich(
// TextSpan(
// children: [
// TextSpan(
// text: S
// .of(context)
// .yixianghuiyuanquanyi,
// style: TextStyle(
// fontWeight: MyFontWeight.semi_bold,
// fontSize: 15.sp,
// color: Color(0xff32A060),
// ),
// ),
// TextSpan(
// text: widget?.vipCardHome?.member
// ?.vipDuration
// .toString() ??
// "0",
// style: TextStyle(
// fontWeight: MyFontWeight.semi_bold,
// fontSize: 18.sp,
// color: Color(0xffF96519),
// ),
// ),
// TextSpan(
// text: " 天",
// style: TextStyle(
// fontWeight: MyFontWeight.semi_bold,
// fontSize: 15.sp,
// color: Color(0xff32A060),
// ),
// ),
// ],
// ),
// textDirection: TextDirection.ltr,
// ))),
// SizedBox(
// width: 10.w,
// ),
// Expanded(
// child: GestureDetector(
// onTap: () {
// setState(() {
// vipRenewShowBottomSheet();
// });
// },
// child: Container(
// alignment: Alignment.center,
// padding: EdgeInsets.symmetric(
// horizontal: 10.w, vertical: 15.h),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(4.w),
// color: Color(0xffffffff),
// boxShadow: [
// BoxShadow(
// color: Colors.black.withAlpha(12),
// offset: Offset(0, 3),
// blurRadius: 14,
// spreadRadius: 0,
// )
// ],
// ),
// child: Row(
// mainAxisAlignment:
// MainAxisAlignment.center,
// crossAxisAlignment:
// CrossAxisAlignment.center,
// children: [
// Text(
// "${(widget?.vipCardHome?.member?.isVipSubscribe ?? false) ? "已开通自动续费" : "续费回乡VIP"}",
// style: TextStyle(
// color: Color((widget
// ?.vipCardHome
// ?.member
// ?.isVipSubscribe ??
// false)
// ? 0xff3A3936
// : 0xff32A060),
// fontSize: 15.sp,
// fontWeight: MyFontWeight.semi_bold,
// ),
// ),
// SizedBox(
// width: 6.w,
// ),
// Image.asset(
// "${(widget?.vipCardHome?.member?.isVipSubscribe ?? false) ? "assets/image/vip_xf.webp" : "assets/image/icon_right.webp"}",
// width: 16,
// height: 16,
// fit: BoxFit.fill,
// color: Color(0xff32A060),
// ),
// ],
// ))),
// )
// ],
// ),
// ),
rechargeGuide(),
],
),
)
],
);
}
1.动态详情,评论-已显示全部—修改; 2.新增加集换卡详情页面; 3.语言-增加部分文本语言并更改; 4.回乡VIP板块更改;原本的VIP卡逻辑暂时不用,换成用户充值200即成为会员,该页面ui调整;(原来逻辑未删减,暂保留不使用) 5.16进制渐变色值的方法,改变亮度暂定统一为95; 6.首页ui调整;邀请好友图片处,原单一图片现更改为轮播效果,新增集换卡引导也放在此处; 7.积分明细页面更改;共用一个页面根据积分跟集换卡的入口,传对应的值,查看对应的数据; 8.积分明细跳转路径更改,新增一个类型带入路径中跳转传入; 9.更改测试版本服务地址; 10.我的页面跟首页更改一致,单一图片改轮播效果; 11.会员中心,会员卡部分更改;将原有写法去掉,重写了会员卡的使用显示,并优化了该页面数据的显示; 12.我的页面,vip等级显示更改; 13.会员卡列表等级接口,实体类新增部分字段;(原定位分数已不用,更改为originScore,后期若用的原字段,需要修改) 14.订单结算页,支付类型更换时queryOrderInfo()接口中。优惠类型做了调整更改;(改修改需要多测试下,尝试多种情况看下,是否有问题;有可能部分情况没有预判到) 15.点单页结算跳转,vipLevelName,vipLevelName字段做了非空判断; 16.UserInfo实体类新增isVip字段;(主要用于查看用户数据是查询该用户是否已是vip卡状态) 17.福利兑换中心页面,我的信息部分ui做调整,新增集换卡数量的显示;
2 years ago
///充值引导
Widget rechargeGuide() {
return Container(
margin: EdgeInsets.only(left: 14.w, right: 14.w, bottom:21.h,top:16.h),
width: double.infinity,
padding: EdgeInsets.only(top:14.h, left:12.h, bottom:8.h, right:14.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(child:
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text.rich(
TextSpan(
children: [
TextSpan(
text: "充值",
style: TextStyle(
fontWeight: MyFontWeight.extra_bold,
fontSize: 18.sp,
fontFamily: 'JDZhengHT',
color: Color(0xFF262626),
),
),
TextSpan(
text: "¥200以上",
style: TextStyle(
fontSize: 18.sp,
color: Color(0xffFF7E12),
fontWeight: MyFontWeight.semi_bold,
),
),
TextSpan(
text: "即开通回乡VIP卡",
style: TextStyle(
fontSize: 18.sp,
color: Color(0xFF262626),
fontWeight: MyFontWeight.semi_bold,
),
),
],
),
textDirection: TextDirection.ltr,
),
Padding(
padding: EdgeInsets.only(top: 6.h, bottom: 10.h),
child: Text(
"享受多门店商品9.2折优惠价!",
style: TextStyle(
color: Color(0xFF32A060),
fontSize: 15.sp,
fontWeight: MyFontWeight.semi_bold,
),
)),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"*活动一切解释权归海峡姐妹品牌公司所有",
style: TextStyle(
color: Color(0xFF151515),
fontSize: 8.sp,
fontWeight: MyFontWeight.semi_bold,
),
),
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){
Navigator.of(context).pushNamed('/router/recharge_page');
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(100)),
border: Border.all(
width: 1.w,
color: Color(0xFF32A060),
style: BorderStyle.solid,
),
color: Color(0xFFFFFFFF),
),
padding: EdgeInsets.symmetric(vertical: 4.h,horizontal: 12.w),
child: Row(children: [
Text(
"去储值",
style: TextStyle(
color: Color(0xFF32A060),
fontSize: 14.sp,
fontWeight: MyFontWeight.regular,
),
),
Image.asset(
"assets/image/icon_right.webp",
width:13,
fit: BoxFit.fill,
height:13,
color: Color(0xFF32A060),
)
]),
),
)
],
)
],
)),
SizedBox(width: 11.h,),
Padding(padding:EdgeInsets.only(top:4.h),
child: Image.asset(
"assets/image/vip_cz.webp",
fit: BoxFit.fill, //填充剩余空间
height:50.w,
width: 54.h,
),)
],
),
);
}
///vip卡
Widget vipCard() {
return Container(
margin: EdgeInsets.fromLTRB(
14.w, (MediaQuery.of(context).padding.top + 50.h), 14.w, 8.h),
width: double.infinity,
height: 207.h,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.w),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
),
child: Stack(
// alignment: Alignment.center,
children: [
Image.asset(
"assets/image/vip_card.webp",
fit: BoxFit.fill, //填充剩余空间
height: double.infinity,
width: double.infinity,
),
Container(
padding: EdgeInsets.only(top: 24.h, right: 16.w),
alignment: Alignment.topRight,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
widget?.vipCardHome?.member?.nickname ?? "",
style: TextStyle(
color: Color(0xff32A060),
fontSize: 15.sp,
fontWeight: MyFontWeight.medium,
),
),
SizedBox(
height: 15.h,
),
if (widget?.vipCardHome?.member?.isVip ?? false)
Text(
"有效期至 ${(widget?.vipCardHome?.member?.vipExpire ?? "").substring(0, (widget?.vipCardHome?.member?.vipExpire ?? "").indexOf(" "))}",
style: TextStyle(
color: Color(0xff32A060),
fontSize: 13.sp,
fontWeight: MyFontWeight.regular,
),
),
],
),
),
],
),
);
}
///VIP购买套餐
Widget vipCardList() {
return Container(
2 years ago
height: 136.h,
margin: EdgeInsets.symmetric(horizontal: 14.w),
child: ListView.builder(
scrollDirection: Axis.horizontal,
physics: BouncingScrollPhysics(),
itemCount: widget?.vipCardHome?.cards?.length ?? 0,
itemBuilder: (context, position) {
return GestureDetector(
onTap: () {
setState(() {
selectIndex = position;
if (widget?.vipCardHome?.member?.isVip ?? false) {
vipShowBottomSheet();
} else {
vipTreatyShowBottomSheet();
}
});
},
child: vipCardItem(widget?.vipCardHome?.cards[position], position),
);
},
),
);
}
Widget vipCardItem(Cards cards, index) {
return Stack(
alignment: Alignment.topRight,
children: [
Container(
height: double.infinity,
width: 166.w,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 25.h),
margin: EdgeInsets.only(right: 15.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.w),
color: Color(selectIndex == index ? 0xffF0FAF4 : 0xffffffff),
border: Border.all(
color: Color(selectIndex == index ? 0xff32A060 : 0xFFEAEAEA),
width: 2,
),
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
),
child: Column(
children: [
Row(
children: [
Expanded(
child: Text(
"${cards?.duration.toString() ?? ""}",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.black,
fontSize: 15.sp,
fontFamily: 'JDZhengHT',
fontWeight: MyFontWeight.medium,
),
),
),
Expanded(
child: Text(
cards?.name ?? "",
textAlign: TextAlign.center,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.black,
fontSize: 15.sp,
fontWeight: MyFontWeight.medium,
),
),
),
],
),
SizedBox(
height: 10.h,
),
Text.rich(
TextSpan(children: [
TextSpan(
text: "",
style: TextStyle(
fontSize: 20.sp,
color: Color(0xff32A060),
fontFamily: 'JDZhengHT',
fontWeight: MyFontWeight.medium,
),
),
TextSpan(
text:
"${AppUtils.calculateDouble(double.tryParse(cards?.price ?? ""))}",
style: TextStyle(
fontSize: 36.sp,
color: Color(0xff32A060),
fontFamily: 'JDZhengHT',
fontWeight: MyFontWeight.medium,
),
),
]),
),
],
),
),
if (cards.autoSubscribe)
Container(
padding: EdgeInsets.symmetric(vertical: 4.h, horizontal: 6.w),
margin: EdgeInsets.only(right: 15.w),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: Radius.circular(6.r),
bottomLeft: Radius.circular(6.r),
),
color: Color(0xff32A060),
),
child: Text(
S.of(context).gengyouhui,
style: TextStyle(
color: Colors.white,
fontSize: 12.sp,
fontWeight: MyFontWeight.regular,
),
),
)
],
);
}
///会员卡续费弹窗
vipRenewShowBottomSheet() {
showModalBottomSheet(
builder: (BuildContext context) {
return StatefulBuilder(builder: (
context,
state,
) {
return renewBuildBottomSheetWidget(context, state);
});
},
backgroundColor: Colors.transparent,
context: context);
}
Widget renewBuildBottomSheetWidget(BuildContext context, state) {
return Container(
padding: EdgeInsets.only(
top: 10.h,
),
decoration: new BoxDecoration(
color: Colors.white,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(8.0),
topRight: const Radius.circular(8.0))),
child: Container(
2 years ago
height: 275.h,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.only(right: 14.w),
child: Row(
children: [
Expanded(
child: Text(
S.of(context).xuefeihuiyuan,
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: MyFontWeight.medium,
fontSize: 15.sp,
color: Color(0xff0D0D0D),
),
)),
GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Icon(
Icons.clear,
color: Colors.black,
),
),
],
)),
SizedBox(
height: 11.h,
),
Container(
2 years ago
height: 136.h,
margin: EdgeInsets.symmetric(horizontal: 14.w),
child: ListView.builder(
scrollDirection: Axis.horizontal,
physics: BouncingScrollPhysics(),
itemCount: widget?.vipCardHome?.cards?.length ?? 0,
itemBuilder: (context, position) {
return GestureDetector(
onTap: () {
state(() {
selectIndex = position;
});
},
child: vipCardItem(
widget?.vipCardHome?.cards[position], position),
);
},
),
),
Container(
width: double.infinity,
height: 40.h,
margin: EdgeInsets.only(
top: 14.h, left: 14.w, right: 14.w, bottom: 5.h),
decoration: new BoxDecoration(
color: Color(0xff383A38),
borderRadius: BorderRadius.circular(24)),
child: GestureDetector(
onTap: () {
Navigator.of(context).pop();
vipShowBottomSheet();
},
child: Container(
height: double.infinity,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: 16.w),
decoration: new BoxDecoration(
color: Color(0xff32A060),
borderRadius: BorderRadius.circular(24)),
child: Text(
S.of(context).likexufei,
style: TextStyle(
fontSize: 16.sp,
height: 1.3.h,
fontWeight: MyFontWeight.regular,
color: Color(0xFFFFFFFF),
),
),
),
),
),
GestureDetector(
onTap: () {
Navigator.of(context)
.pushNamed('/router/user_vip_service_page');
},
child: Padding(
padding: EdgeInsets.only(left: 14.w, bottom: 15.h),
child: Text.rich(
TextSpan(
children: [
TextSpan(
text: "开通即默认同意",
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 12.sp,
color: Color(0xff4D4D4D),
),
),
TextSpan(
text: "《回乡VIP会员卡规则协议》",
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 12.sp,
color: Color(0xff32A060),
),
),
],
),
textDirection: TextDirection.ltr,
),
),
),
],
),
));
}
///会员卡包月协议弹窗
vipTreatyShowBottomSheet() {
showModalBottomSheet(
builder: (BuildContext context) {
return treatyBuildBottomSheetWidget(context);
},
backgroundColor: Colors.transparent,
context: context);
}
Widget treatyBuildBottomSheetWidget(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(vertical: 20.h, horizontal: 14.w),
height: 127.h,
decoration: new BoxDecoration(
color: Colors.white,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(6.0),
topRight: const Radius.circular(6.0))),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
onTap: () {
Navigator.of(context)
.pushNamed('/router/user_vip_service_page');
},
child: Padding(
padding: EdgeInsets.only(left: 4.w),
child: Text.rich(
TextSpan(
children: [
TextSpan(
text: "开通即默认同意",
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 12.sp,
color: Color(0xff4D4D4D),
),
),
TextSpan(
text: "《回乡VIP会员卡规则协议》",
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 12.sp,
color: Color(0xff32A060),
),
),
],
),
textDirection: TextDirection.ltr,
),
),
),
GestureDetector(
onTap: () {
Navigator.of(context).pop();
vipShowBottomSheet();
},
child: Container(
height: 40.h,
alignment: Alignment.center,
margin: EdgeInsets.only(top: 26.h),
padding: EdgeInsets.symmetric(horizontal: 16.w),
decoration: new BoxDecoration(
color: Color(0xff32A060),
borderRadius: BorderRadius.circular(24)),
child: Text(
S.of(context).likekaitong,
style: TextStyle(
fontSize: 16.sp,
height: 1.3.h,
fontWeight: MyFontWeight.regular,
color: Color(0xFFFFFFFF),
),
),
),
)
],
));
}
///会员卡包月购买弹窗
vipShowBottomSheet() {
showModalBottomSheet(
builder: (BuildContext context) {
return StatefulBuilder(builder: (
context,
state,
) {
return buildBottomSheetWidget(context, state);
});
},
backgroundColor: Colors.transparent,
context: context);
}
Widget buildBottomSheetWidget(BuildContext context, state) {
return Container(
padding:
EdgeInsets.only(top: 16.h, left: 16.w, right: 16.w, bottom: 35.h),
decoration: new BoxDecoration(
color: Colors.white,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(8.0),
topRight: const Radius.circular(8.0))),
child: Container(
2 years ago
height: 230.h,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
children: [
Expanded(
child: Text(
S.of(context).zhifufangshi,
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 15.sp,
color: Color(0xff0D0D0D),
),
)),
GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Icon(
Icons.clear,
color: Colors.black,
),
),
],
),
if (!(widget?.vipCardHome?.cards[selectIndex]?.autoSubscribe ??
false))
GestureDetector(
onTap: () {
state(() {
payType = 1;
});
},
child: Container(
padding: EdgeInsets.only(
left: 14.w, right: 32.w, top: 11.h, bottom: 11.h),
margin: EdgeInsets.only(top: 17.h),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4.w),
color: Color(payType == 1 ? 0xFFF0FAF4 : 0xffF9F9F9),
border: Border.all(
color: Color(payType == 1 ? 0xFF32A060 : 0xFFFAFAFA),
width: payType == 1 ? 2 : 0,
),
boxShadow: [
BoxShadow(
color: Color(0xffF9F9F9).withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
),
child: Row(
children: [
Image.asset(
"assets/image/icon_we_chat.webp",
width: 20,
fit: BoxFit.fill,
height: 20,
),
SizedBox(
width: 8.w,
),
Text(
S.of(context).weixinzhifu,
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 15.sp,
color: Color(0xff0D0D0D),
),
),
SizedBox(
width: 20.w,
),
],
),
),
),
GestureDetector(
onTap: () {
state(() {
payType = 2;
});
},
child: Container(
padding: EdgeInsets.only(
left: 14.w, right: 32.w, top: 11.h, bottom: 11.h),
margin: EdgeInsets.only(top: 17.h),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4.w),
color: Color(payType == 2 ? 0xFFF0FAF4 : 0xffF9F9F9),
border: Border.all(
color: Color(payType == 2 ? 0xFF32A060 : 0xFFFAFAFA),
width: payType == 2 ? 2 : 0,
),
boxShadow: [
BoxShadow(
color: Color(0xffF9F9F9).withAlpha(12),
offset: Offset(0, 3),
blurRadius: 14,
spreadRadius: 0,
)
],
),
child: Row(
children: [
Image.asset(
"assets/image/icon_alipay.webp",
width: 20,
fit: BoxFit.fill,
height: 20,
),
SizedBox(
width: 8.w,
),
Text(
S.of(context).zhifubaozhifu,
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 15.sp,
color: Color(0xff0D0D0D),
),
),
SizedBox(
width: 20.w,
),
],
),
),
),
Spacer(),
Container(
width: double.infinity,
height: 40.h,
decoration: new BoxDecoration(
color: Color(0xff383A38),
borderRadius: BorderRadius.circular(24)),
child: Row(
children: [
SizedBox(
width: 16.w,
),
Expanded(
child: Text.rich(
TextSpan(
children: [
TextSpan(
text: "",
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 12.sp,
fontFamily: 'JDZhengHT',
color: Colors.white,
),
),
TextSpan(
text: AppUtils.calculateDouble(double.tryParse(
widget?.vipCardHome?.cards[selectIndex]
?.price ??
"")),
style: TextStyle(
fontWeight: MyFontWeight.regular,
fontSize: 20.sp,
fontFamily: 'JDZhengHT',
color: Colors.white,
),
),
],
),
textDirection: TextDirection.ltr,
)),
GestureDetector(
onTap: () {
Navigator.of(context).pop();
rechargeVIP();
},
child: Container(
height: double.infinity,
alignment: Alignment.center,
padding: EdgeInsets.symmetric(horizontal: 16.w),
decoration: new BoxDecoration(
color: Color(0xff32A060),
borderRadius: BorderRadius.circular(24)),
child: Text(
S.of(context).likezhifu,
style: TextStyle(
fontSize: 16.sp,
height: 1.3.h,
fontWeight: MyFontWeight.regular,
color: Color(0xFFFFFFFF),
),
),
),
)
],
),
2 years ago
),
],
),
));
}
}