4224b3f8
吴启风
feat:支付详情页ui
|
1
2
3
4
|
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:wow_english/common/extension/string_extension.dart';
|
07599105
吴启风
feat:商品列表请求&路由
|
5
|
import 'package:wow_english/models/product_entity.dart';
|
4224b3f8
吴启风
feat:支付详情页ui
|
6
7
8
9
|
import '../../common/core/assets_const.dart';
import '../../common/widgets/we_app_bar.dart';
import '../../utils/image_util.dart';
|
795fb23f
吴启风
feat:支付成功刷新用户数据
|
10
|
import '../user/bloc/user_bloc.dart';
|
4224b3f8
吴启风
feat:支付详情页ui
|
11
12
13
14
15
16
17
18
|
import 'bloc.dart';
import 'event.dart';
import 'state.dart';
Widget buildRadioOption({
required int value,
required ImageProvider icon,
required String text,
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
19
20
|
required bool isSelected,
required ValueChanged onSelect,
|
4224b3f8
吴启风
feat:支付详情页ui
|
21
|
}) {
|
2caf5896
吴启风
feat:商品列表图片优化
|
22
23
24
25
26
27
28
29
30
31
32
33
34
|
return GestureDetector(
onTap: () {
onSelect(value);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image(image: icon, width: 25.0.w, height: 25.0.h, fit: BoxFit.contain),
const SizedBox(width: 10.0),
Expanded(
child: Text(
text,
style: TextStyle(color: const Color(0xFF333333), fontSize: 12.5.sp),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
35
|
),
|
2caf5896
吴启风
feat:商品列表图片优化
|
36
37
38
39
40
41
42
43
44
45
46
|
),
Image(
image: isSelected
? AssetImage('checked'.assetPng)
: AssetImage('unchecked'.assetPng),
width: 22.0.w,
height: 22.0.h,
),
],
),
);
|
4224b3f8
吴启风
feat:支付详情页ui
|
47
48
49
|
}
class ShoppingPage extends StatelessWidget {
|
07599105
吴启风
feat:商品列表请求&路由
|
50
51
52
|
const ShoppingPage({super.key, this.productEntity});
final ProductEntity? productEntity;
|
4224b3f8
吴启风
feat:支付详情页ui
|
53
54
55
56
57
|
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) =>
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
58
|
ShoppingBloc(productEntity)..add(InitEvent()),
|
4224b3f8
吴启风
feat:支付详情页ui
|
59
60
61
62
63
64
|
child: _ShoppingView(),
);
}
}
class _ShoppingView extends StatelessWidget {
|
4224b3f8
吴启风
feat:支付详情页ui
|
65
66
67
|
@override
Widget build(BuildContext context) {
final bloc = BlocProvider.of<ShoppingBloc>(context);
|
795fb23f
吴启风
feat:支付成功刷新用户数据
|
68
|
final userBloc = BlocProvider.of<UserBloc>(context);
|
4224b3f8
吴启风
feat:支付详情页ui
|
69
70
|
return BlocListener<ShoppingBloc, ShoppingState>(
listener: (context, state) {
|
2879454a
吴启风
feat:调通支付宝支付&游戏列表页
|
71
|
if (state is PaySuccessState) {
|
795fb23f
吴启风
feat:支付成功刷新用户数据
|
72
|
userBloc.add(PayStateChangeEvent());
|
2879454a
吴启风
feat:调通支付宝支付&游戏列表页
|
73
74
|
Navigator.pop(context);
}
|
4224b3f8
吴启风
feat:支付详情页ui
|
75
76
|
},
child: Scaffold(
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
77
|
appBar: WEAppBar(
|
4224b3f8
吴启风
feat:支付详情页ui
|
78
|
//标题传进来的
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
79
|
titleText: bloc.productData?.name ?? '',
|
4224b3f8
吴启风
feat:支付详情页ui
|
80
81
82
83
84
85
|
),
body: Container(
margin: const EdgeInsets.only(left: 80.0, top: 28.0, right: 56.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
|
2caf5896
吴启风
feat:商品列表图片优化
|
86
87
|
Container(
width: 210.w, // 图片宽度
|
2101b1cc
吴启风
feat:购买页ui优化
|
88
|
height: 210.w, // 图片高度
|
2caf5896
吴启风
feat:商品列表图片优化
|
89
90
91
92
93
94
95
96
97
98
99
|
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5.w),
// 圆角为5
border:
Border.all(width: 1.w, color: const Color(0xFF333333)),
// 边框宽度为1
// 使用ClipRRect圆角会有间隙,ClipRRect在裁剪时可能会导致圆角部分的边框显示不完整。
image: DecorationImage(
image: NetworkImage(bloc.productData?.detailPicUrl ?? ''),
// 图片地址
fit: BoxFit.cover, // 图片填充方式
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
100
101
|
),
),
|
4224b3f8
吴启风
feat:支付详情页ui
|
102
103
|
),
const SizedBox(width: 35.5),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
104
|
Expanded(child: _paymentWidget())
|
4224b3f8
吴启风
feat:支付详情页ui
|
105
106
107
|
],
),
),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
108
109
|
),
);
|
4224b3f8
吴启风
feat:支付详情页ui
|
110
111
112
|
}
}
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
113
|
Widget _paymentWidget() => BlocBuilder<ShoppingBloc, ShoppingState>(
|
4224b3f8
吴启风
feat:支付详情页ui
|
114
115
116
117
118
|
builder: (context, state) {
final bloc = BlocProvider.of<ShoppingBloc>(context);
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
119
|
RichText(
|
2caf5896
吴启风
feat:商品列表图片优化
|
120
121
122
123
124
125
126
127
128
129
|
text: TextSpan(children: [
TextSpan(
text: '套餐价格:',
style: TextStyle(
color: const Color(0xFF333333), fontSize: 16.5.sp)),
TextSpan(
text: '¥${bloc.productData?.price ?? ''}',
style: TextStyle(
color: const Color(0xFFE5262A), fontSize: 16.5.sp)),
]),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
130
131
132
133
|
),
const SizedBox(height: 14.5),
Text(
'套餐名称:${bloc.productData?.name}',
|
2caf5896
吴启风
feat:商品列表图片优化
|
134
|
style: TextStyle(color: const Color(0xFF333333), fontSize: 16.sp),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
135
136
137
|
maxLines: 2,
),
const SizedBox(height: 14.5),
|
4224b3f8
吴启风
feat:支付详情页ui
|
138
|
Container(
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
139
|
padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 10.h),
|
4224b3f8
吴启风
feat:支付详情页ui
|
140
141
142
143
144
145
146
147
|
decoration: BoxDecoration(
image: DecorationImage(
image: ImageUtil.getImageProviderOnDefault(
AssetsConst.bgUserInformationText),
fit: BoxFit.fill)),
child: const Text('支付方式选择',
style: TextStyle(
color: Color(0xFF333333),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
148
|
fontSize: 12.5,
|
4224b3f8
吴启风
feat:支付详情页ui
|
149
150
|
fontFamily: 'PingFangSC-Regular')),
),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
151
|
const SizedBox(height: 18.0),
|
4224b3f8
吴启风
feat:支付详情页ui
|
152
153
154
155
|
buildRadioOption(
value: PaymentChannel.wechatPay.payChannelType,
icon: AssetImage('weixin'.assetPng),
text: PaymentChannel.wechatPay.payChannelName,
|
2caf5896
吴启风
feat:商品列表图片优化
|
156
157
|
isSelected: bloc.curPaymentChannel.payChannelType ==
PaymentChannel.wechatPay.payChannelType,
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
158
159
|
onSelect: (newValue) {
bloc.add(ChangePaymentChannelEvent(PaymentChannel.wechatPay));
|
4224b3f8
吴启风
feat:支付详情页ui
|
160
161
|
},
),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
162
|
const SizedBox(height: 15.0),
|
4224b3f8
吴启风
feat:支付详情页ui
|
163
164
165
166
|
buildRadioOption(
value: PaymentChannel.aliPay.payChannelType,
icon: AssetImage('zhifubao'.assetPng),
text: PaymentChannel.aliPay.payChannelName,
|
2caf5896
吴启风
feat:商品列表图片优化
|
167
168
|
isSelected: bloc.curPaymentChannel.payChannelType ==
PaymentChannel.aliPay.payChannelType,
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
169
|
onSelect: (newValue) {
|
2879454a
吴启风
feat:调通支付宝支付&游戏列表页
|
170
|
bloc.add(ChangePaymentChannelEvent(PaymentChannel.aliPay));
|
4224b3f8
吴启风
feat:支付详情页ui
|
171
172
|
},
),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
173
174
175
176
177
|
const SizedBox(height: 20.0),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RichText(
|
2caf5896
吴启风
feat:商品列表图片优化
|
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
text: TextSpan(children: [
const TextSpan(
text: '需支付:',
style: TextStyle(
color: Color(0xFF333333),
fontSize: 12.5,
fontFamily: 'PingFangSC-Regular')),
TextSpan(
text: '¥${bloc.productData?.price ?? ''}',
style: TextStyle(
color: const Color(0xFFE7383B),
fontSize: 41.sp,
fontFamily: 'PingFangSC-Regular')),
]),
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
192
193
194
195
|
),
// 确认支付按钮
GestureDetector(
onTap: () {
|
2caf5896
吴启风
feat:商品列表图片优化
|
196
197
|
bloc.add(
DoPayEvent(bloc.productData, bloc.curPaymentChannel));
|
ad37b653
吴启风
feat:1、完成微信支付;2、商...
|
198
199
200
201
202
203
204
205
|
},
child: Image(
width: 105.w,
height: 45.h,
image: AssetImage('btn_pay'.assetPng),
),
)
],
|
4224b3f8
吴启风
feat:支付详情页ui
|
206
207
208
209
210
|
),
],
);
},
);
|