Blame view

lib/pages/shopping/view.dart 7.3 KB
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
              ),
            ],
          );
        },
      );