Showing
3 changed files
with
53 additions
and
61 deletions
| ... | @@ -28,4 +28,8 @@ abstract class BaseState<T extends StatefulWidget> extends State<T> { | ... | @@ -28,4 +28,8 @@ abstract class BaseState<T extends StatefulWidget> extends State<T> { |
| 28 | toast(String text) { | 28 | toast(String text) { |
| 29 | EasyLoading.showToast(text); | 29 | EasyLoading.showToast(text); |
| 30 | } | 30 | } |
| 31 | + | ||
| 32 | + Widget buildLoading() { | ||
| 33 | + return const Center(child: CircularProgressIndicator()); | ||
| 34 | + } | ||
| 31 | } | 35 | } | ... | ... |
| ... | @@ -65,6 +65,8 @@ class MembershipDataGoodsList { | ... | @@ -65,6 +65,8 @@ class MembershipDataGoodsList { |
| 65 | int? id; | 65 | int? id; |
| 66 | @JSONField(name: "membership_id") | 66 | @JSONField(name: "membership_id") |
| 67 | String? membershipId; | 67 | String? membershipId; |
| 68 | + @JSONField(name: "iap_id") | ||
| 69 | + String? iapId; | ||
| 68 | String? name; | 70 | String? name; |
| 69 | String? price; | 71 | String? price; |
| 70 | @JSONField(name: "line_price") | 72 | @JSONField(name: "line_price") | ... | ... |
| ... | @@ -54,6 +54,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -54,6 +54,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 54 | setState(() {}); | 54 | setState(() {}); |
| 55 | }); | 55 | }); |
| 56 | if (SpUtil.containsKey(Constant.userToken)!) { | 56 | if (SpUtil.containsKey(Constant.userToken)!) { |
| 57 | + showLoading(); | ||
| 57 | Provider.of<MembershipViewProvider>(context, listen: false).setSelectedMembership(null); | 58 | Provider.of<MembershipViewProvider>(context, listen: false).setSelectedMembership(null); |
| 58 | Provider.of<MembershipViewProvider>(context, listen: false).fetchMembershipData('0'); | 59 | Provider.of<MembershipViewProvider>(context, listen: false).fetchMembershipData('0'); |
| 59 | } else { | 60 | } else { |
| ... | @@ -62,17 +63,14 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -62,17 +63,14 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 62 | } | 63 | } |
| 63 | 64 | ||
| 64 | @override | 65 | @override |
| 65 | - void onFirstBuildBody(BuildContext context) { | ||
| 66 | - super.onFirstBuildBody(context); | ||
| 67 | - showLoading(); | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - @override | ||
| 71 | Widget buildBody(BuildContext context) { | 66 | Widget buildBody(BuildContext context) { |
| 67 | + ///响应数据 | ||
| 72 | apiResponse = Provider.of<MembershipViewProvider>(context).response; | 68 | apiResponse = Provider.of<MembershipViewProvider>(context).response; |
| 73 | if (apiResponse?.status != Status.LOADING) { | 69 | if (apiResponse?.status != Status.LOADING) { |
| 74 | hideLoading(); | 70 | hideLoading(); |
| 75 | } | 71 | } |
| 72 | + | ||
| 73 | + ///写死背景加载会更快 | ||
| 76 | var url = "https://api.parlando.ink/storage/images/274d864a62d277b2a29c4db39f92d591.png"; | 74 | var url = "https://api.parlando.ink/storage/images/274d864a62d277b2a29c4db39f92d591.png"; |
| 77 | return Scaffold( | 75 | return Scaffold( |
| 78 | body: Container( | 76 | body: Container( |
| ... | @@ -90,10 +88,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -90,10 +88,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 90 | ); | 88 | ); |
| 91 | } | 89 | } |
| 92 | 90 | ||
| 93 | - Widget buildLoading() { | 91 | + ///底部一个磨砂玻璃区域 |
| 94 | - return const Center(child: CircularProgressIndicator()); | ||
| 95 | - } | ||
| 96 | - | ||
| 97 | Widget buildCompleteWidget() { | 92 | Widget buildCompleteWidget() { |
| 98 | MembershipData? mb = apiResponse?.data; | 93 | MembershipData? mb = apiResponse?.data; |
| 99 | return Container( | 94 | return Container( |
| ... | @@ -118,39 +113,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -118,39 +113,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 118 | ); | 113 | ); |
| 119 | } | 114 | } |
| 120 | 115 | ||
| 121 | - Widget initOtherEntrance() { | 116 | + ///会员内容区域 |
| 122 | - return Row( | ||
| 123 | - mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 124 | - mainAxisSize: MainAxisSize.min, | ||
| 125 | - crossAxisAlignment: CrossAxisAlignment.center, | ||
| 126 | - children: [ | ||
| 127 | - TextButton( | ||
| 128 | - onPressed: () {}, | ||
| 129 | - child: Text( | ||
| 130 | - "服务协议", | ||
| 131 | - style: TextStyle(fontSize: 14.px, color: Colors.white), | ||
| 132 | - ), | ||
| 133 | - ), | ||
| 134 | - Container(width: 0.6, height: 15.0, color: Colours.line), | ||
| 135 | - TextButton( | ||
| 136 | - onPressed: () {}, | ||
| 137 | - child: Text( | ||
| 138 | - "隐私政策", | ||
| 139 | - style: TextStyle(fontSize: 14.px, color: Colors.white), | ||
| 140 | - ), | ||
| 141 | - ), | ||
| 142 | - Container(width: 0.6, height: 15.0, color: Colours.line), | ||
| 143 | - TextButton( | ||
| 144 | - onPressed: () {}, | ||
| 145 | - child: Text( | ||
| 146 | - "恢复购买", | ||
| 147 | - style: TextStyle(fontSize: 14.px, color: Colors.white), | ||
| 148 | - ), | ||
| 149 | - ), | ||
| 150 | - ], | ||
| 151 | - ); | ||
| 152 | - } | ||
| 153 | - | ||
| 154 | buildMemberContent(MembershipData? mb) { | 117 | buildMemberContent(MembershipData? mb) { |
| 155 | return Column( | 118 | return Column( |
| 156 | crossAxisAlignment: CrossAxisAlignment.center, | 119 | crossAxisAlignment: CrossAxisAlignment.center, |
| ... | @@ -166,6 +129,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -166,6 +129,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 166 | ); | 129 | ); |
| 167 | } | 130 | } |
| 168 | 131 | ||
| 132 | + ///返回行为 | ||
| 169 | initBackBar() { | 133 | initBackBar() { |
| 170 | return Container( | 134 | return Container( |
| 171 | alignment: Alignment.centerLeft, | 135 | alignment: Alignment.centerLeft, |
| ... | @@ -178,23 +142,19 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -178,23 +142,19 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 178 | ); | 142 | ); |
| 179 | } | 143 | } |
| 180 | 144 | ||
| 145 | + ///购买项列表 | ||
| 181 | buildProductWidget(MembershipData? mb) { | 146 | buildProductWidget(MembershipData? mb) { |
| 182 | - var widgets = mb?.goodsList?.map((e) => buildProductItem(e)).toList() ?? []; | 147 | + var widgets = mb?.goodsList?.map((e) => buildBuyItem(e)).toList() ?? []; |
| 183 | return Column(children: widgets); | 148 | return Column(children: widgets); |
| 184 | } | 149 | } |
| 185 | 150 | ||
| 186 | - Widget buildProductItem(MembershipDataGoodsList e) { | 151 | + ///每一个购买项 |
| 152 | + Widget buildBuyItem(MembershipDataGoodsList e) { | ||
| 187 | ProductDetails? element; | 153 | ProductDetails? element; |
| 188 | - for (var value in _products) { | 154 | + var detailList = _products.where((value) => value.id == e.iapId).toList(); |
| 189 | - if (value.id == e.membershipId || mapId(value.id, e.id)) { | 155 | + if (detailList.isNotEmpty) { |
| 190 | - element = value; | 156 | + element = detailList.first; |
| 191 | - break; | ||
| 192 | - } | ||
| 193 | } | 157 | } |
| 194 | - return buildBuyItem(element, e); | ||
| 195 | - } | ||
| 196 | - | ||
| 197 | - Widget buildBuyItem(ProductDetails? element, MembershipDataGoodsList e) { | ||
| 198 | var style = const TextStyle(color: Colors.white); | 158 | var style = const TextStyle(color: Colors.white); |
| 199 | var button = Text("购买", style: style).paddingLeftRight(15).paddingTopBottom(8).click(() { | 159 | var button = Text("购买", style: style).paddingLeftRight(15).paddingTopBottom(8).click(() { |
| 200 | showLoading(); | 160 | showLoading(); |
| ... | @@ -211,6 +171,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -211,6 +171,7 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 211 | ).paddingLeftRight(10).paddingTopBottom(5); | 171 | ).paddingLeftRight(10).paddingTopBottom(5); |
| 212 | } | 172 | } |
| 213 | 173 | ||
| 174 | + ///价格字符串,优先使用商店的本地化价格 | ||
| 214 | String buildBuyPrice(ProductDetails? element, MembershipDataGoodsList e) { | 175 | String buildBuyPrice(ProductDetails? element, MembershipDataGoodsList e) { |
| 215 | if (element == null) { | 176 | if (element == null) { |
| 216 | return "${e.price}/${e.name}"; | 177 | return "${e.price}/${e.name}"; |
| ... | @@ -218,13 +179,38 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO | ... | @@ -218,13 +179,38 @@ class MembershipPageState extends BaseState<MembershipPage> with WidgetsBindingO |
| 218 | return "${element.price}/${e.name}"; | 179 | return "${element.price}/${e.name}"; |
| 219 | } | 180 | } |
| 220 | 181 | ||
| 221 | - bool mapId(String? id, int? membershipId) { | 182 | + ///其他入口区域 |
| 222 | - bool year = id == 'yearly_yiyan_vip' && membershipId == 4; | 183 | + Widget initOtherEntrance() { |
| 223 | - bool month = id == 'monthly_yiyan_vip' && membershipId == 3; | 184 | + return Row( |
| 224 | - if (year || month) { | 185 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, |
| 225 | - print("$id ---- $membershipId"); | 186 | + mainAxisSize: MainAxisSize.min, |
| 226 | - } | 187 | + crossAxisAlignment: CrossAxisAlignment.center, |
| 227 | - return year || month; | 188 | + children: [ |
| 189 | + TextButton( | ||
| 190 | + onPressed: () {}, | ||
| 191 | + child: Text( | ||
| 192 | + "服务协议", | ||
| 193 | + style: TextStyle(fontSize: 14.px, color: Colors.white), | ||
| 194 | + ), | ||
| 195 | + ), | ||
| 196 | + Container(width: 0.6, height: 15.0, color: Colours.line), | ||
| 197 | + TextButton( | ||
| 198 | + onPressed: () {}, | ||
| 199 | + child: Text( | ||
| 200 | + "隐私政策", | ||
| 201 | + style: TextStyle(fontSize: 14.px, color: Colors.white), | ||
| 202 | + ), | ||
| 203 | + ), | ||
| 204 | + Container(width: 0.6, height: 15.0, color: Colours.line), | ||
| 205 | + TextButton( | ||
| 206 | + onPressed: () {}, | ||
| 207 | + child: Text( | ||
| 208 | + "恢复购买", | ||
| 209 | + style: TextStyle(fontSize: 14.px, color: Colors.white), | ||
| 210 | + ), | ||
| 211 | + ), | ||
| 212 | + ], | ||
| 213 | + ); | ||
| 228 | } | 214 | } |
| 229 | 215 | ||
| 230 | @override | 216 | @override | ... | ... |
-
Please register or login to post a comment