Chad

优化支付过程

......@@ -28,4 +28,8 @@ abstract class BaseState<T extends StatefulWidget> extends State<T> {
toast(String text) {
EasyLoading.showToast(text);
}
Widget buildLoading() {
return const Center(child: CircularProgressIndicator());
}
}
......
......@@ -65,6 +65,8 @@ class MembershipDataGoodsList {
int? id;
@JSONField(name: "membership_id")
String? membershipId;
@JSONField(name: "iap_id")
String? iapId;
String? name;
String? price;
@JSONField(name: "line_price")
......
......@@ -54,6 +54,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
setState(() {});
});
if (SpUtil.containsKey(Constant.userToken)!) {
showLoading();
Provider.of<MembershipViewProvider>(context, listen: false).setSelectedMembership(null);
Provider.of<MembershipViewProvider>(context, listen: false).fetchMembershipData('0');
} else {
......@@ -62,17 +63,14 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
}
@override
void onFirstBuildBody(BuildContext context) {
super.onFirstBuildBody(context);
showLoading();
}
@override
Widget buildBody(BuildContext context) {
///响应数据
apiResponse = Provider.of<MembershipViewProvider>(context).response;
if (apiResponse?.status != Status.LOADING) {
hideLoading();
}
///写死背景加载会更快
var url = "https://api.parlando.ink/storage/images/274d864a62d277b2a29c4db39f92d591.png";
return Scaffold(
body: Container(
......@@ -90,10 +88,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
);
}
Widget buildLoading() {
return const Center(child: CircularProgressIndicator());
}
///底部一个磨砂玻璃区域
Widget buildCompleteWidget() {
MembershipData? mb = apiResponse?.data;
return Container(
......@@ -118,39 +113,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
);
}
Widget initOtherEntrance() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
TextButton(
onPressed: () {},
child: Text(
"服务协议",
style: TextStyle(fontSize: 14.px, color: Colors.white),
),
),
Container(width: 0.6, height: 15.0, color: Colours.line),
TextButton(
onPressed: () {},
child: Text(
"隐私政策",
style: TextStyle(fontSize: 14.px, color: Colors.white),
),
),
Container(width: 0.6, height: 15.0, color: Colours.line),
TextButton(
onPressed: () {},
child: Text(
"恢复购买",
style: TextStyle(fontSize: 14.px, color: Colors.white),
),
),
],
);
}
///会员内容区域
buildMemberContent(MembershipData? mb) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
......@@ -166,6 +129,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
);
}
///返回行为
initBackBar() {
return Container(
alignment: Alignment.centerLeft,
......@@ -178,23 +142,19 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
);
}
///购买项列表
buildProductWidget(MembershipData? mb) {
var widgets = mb?.goodsList?.map((e) => buildProductItem(e)).toList() ?? [];
var widgets = mb?.goodsList?.map((e) => buildBuyItem(e)).toList() ?? [];
return Column(children: widgets);
}
Widget buildProductItem(MembershipDataGoodsList e) {
///每一个购买项
Widget buildBuyItem(MembershipDataGoodsList e) {
ProductDetails? element;
for (var value in _products) {
if (value.id == e.membershipId || mapId(value.id, e.id)) {
element = value;
break;
}
var detailList = _products.where((value) => value.id == e.iapId).toList();
if (detailList.isNotEmpty) {
element = detailList.first;
}
return buildBuyItem(element, e);
}
Widget buildBuyItem(ProductDetails? element, MembershipDataGoodsList e) {
var style = const TextStyle(color: Colors.white);
var button = Text("购买", style: style).paddingLeftRight(15).paddingTopBottom(8).click(() {
showLoading();
......@@ -211,6 +171,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
).paddingLeftRight(10).paddingTopBottom(5);
}
///价格字符串,优先使用商店的本地化价格
String buildBuyPrice(ProductDetails? element, MembershipDataGoodsList e) {
if (element == null) {
return "${e.price}/${e.name}";
......@@ -218,13 +179,38 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO
return "${element.price}/${e.name}";
}
bool mapId(String? id, int? membershipId) {
bool year = id == 'yearly_yiyan_vip' && membershipId == 4;
bool month = id == 'monthly_yiyan_vip' && membershipId == 3;
if (year || month) {
print("$id ---- $membershipId");
}
return year || month;
///其他入口区域
Widget initOtherEntrance() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
TextButton(
onPressed: () {},
child: Text(
"服务协议",
style: TextStyle(fontSize: 14.px, color: Colors.white),
),
),
Container(width: 0.6, height: 15.0, color: Colours.line),
TextButton(
onPressed: () {},
child: Text(
"隐私政策",
style: TextStyle(fontSize: 14.px, color: Colors.white),
),
),
Container(width: 0.6, height: 15.0, color: Colours.line),
TextButton(
onPressed: () {},
child: Text(
"恢复购买",
style: TextStyle(fontSize: 14.px, color: Colors.white),
),
),
],
);
}
@override
......