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