Blame view

lib/pages/shopping/view.dart 7.22 KB
4224b3f8   吴启风   feat:支付详情页ui
1
2
3
4
5
  import 'package:cached_network_image/cached_network_image.dart';
  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:商品列表请求&路由
6
  import 'package:wow_english/models/product_entity.dart';
4224b3f8   吴启风   feat:支付详情页ui
7
8
9
10
  
  import '../../common/core/assets_const.dart';
  import '../../common/widgets/we_app_bar.dart';
  import '../../utils/image_util.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);
4224b3f8   吴启风   feat:支付详情页ui
68
69
      return BlocListener<ShoppingBloc, ShoppingState>(
        listener: (context, state) {
2879454a   吴启风   feat:调通支付宝支付&游戏列表页
70
71
72
          if (state is PaySuccessState) {
            Navigator.pop(context);
          }
4224b3f8   吴启风   feat:支付详情页ui
73
74
        },
        child: Scaffold(
ad37b653   吴启风   feat:1、完成微信支付;2、商...
75
          appBar: WEAppBar(
4224b3f8   吴启风   feat:支付详情页ui
76
            //标题传进来的
ad37b653   吴启风   feat:1、完成微信支付;2、商...
77
            titleText: bloc.productData?.name ?? '',
4224b3f8   吴启风   feat:支付详情页ui
78
79
80
81
82
83
          ),
          body: Container(
            margin: const EdgeInsets.only(left: 80.0, top: 28.0, right: 56.0),
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
2caf5896   吴启风   feat:商品列表图片优化
84
85
86
87
88
89
90
91
92
93
94
95
96
97
                Container(
                  width: 210.w, // 图片宽度
                  height: 210.h, // 图片高度
                  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、商...
98
99
                    ),
                  ),
4224b3f8   吴启风   feat:支付详情页ui
100
101
                ),
                const SizedBox(width: 35.5),
ad37b653   吴启风   feat:1、完成微信支付;2、商...
102
                Expanded(child: _paymentWidget())
4224b3f8   吴启风   feat:支付详情页ui
103
104
105
              ],
            ),
          ),
ad37b653   吴启风   feat:1、完成微信支付;2、商...
106
107
        ),
      );
4224b3f8   吴启风   feat:支付详情页ui
108
109
110
    }
  }
  
ad37b653   吴启风   feat:1、完成微信支付;2、商...
111
  Widget _paymentWidget() => BlocBuilder<ShoppingBloc, ShoppingState>(
4224b3f8   吴启风   feat:支付详情页ui
112
113
114
115
116
        builder: (context, state) {
          final bloc = BlocProvider.of<ShoppingBloc>(context);
          return Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
ad37b653   吴启风   feat:1、完成微信支付;2、商...
117
              RichText(
2caf5896   吴启风   feat:商品列表图片优化
118
119
120
121
122
123
124
125
126
127
                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、商...
128
129
130
131
              ),
              const SizedBox(height: 14.5),
              Text(
                '套餐名称:${bloc.productData?.name}',
2caf5896   吴启风   feat:商品列表图片优化
132
                style: TextStyle(color: const Color(0xFF333333), fontSize: 16.sp),
ad37b653   吴启风   feat:1、完成微信支付;2、商...
133
134
135
                maxLines: 2,
              ),
              const SizedBox(height: 14.5),
4224b3f8   吴启风   feat:支付详情页ui
136
              Container(
ad37b653   吴启风   feat:1、完成微信支付;2、商...
137
                padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 10.h),
4224b3f8   吴启风   feat:支付详情页ui
138
139
140
141
142
143
144
145
                decoration: BoxDecoration(
                    image: DecorationImage(
                        image: ImageUtil.getImageProviderOnDefault(
                            AssetsConst.bgUserInformationText),
                        fit: BoxFit.fill)),
                child: const Text('支付方式选择',
                    style: TextStyle(
                        color: Color(0xFF333333),
ad37b653   吴启风   feat:1、完成微信支付;2、商...
146
                        fontSize: 12.5,
4224b3f8   吴启风   feat:支付详情页ui
147
148
                        fontFamily: 'PingFangSC-Regular')),
              ),
ad37b653   吴启风   feat:1、完成微信支付;2、商...
149
              const SizedBox(height: 18.0),
4224b3f8   吴启风   feat:支付详情页ui
150
151
152
153
              buildRadioOption(
                value: PaymentChannel.wechatPay.payChannelType,
                icon: AssetImage('weixin'.assetPng),
                text: PaymentChannel.wechatPay.payChannelName,
2caf5896   吴启风   feat:商品列表图片优化
154
155
                isSelected: bloc.curPaymentChannel.payChannelType ==
                    PaymentChannel.wechatPay.payChannelType,
ad37b653   吴启风   feat:1、完成微信支付;2、商...
156
157
                onSelect: (newValue) {
                  bloc.add(ChangePaymentChannelEvent(PaymentChannel.wechatPay));
4224b3f8   吴启风   feat:支付详情页ui
158
159
                },
              ),
ad37b653   吴启风   feat:1、完成微信支付;2、商...
160
              const SizedBox(height: 15.0),
4224b3f8   吴启风   feat:支付详情页ui
161
162
163
164
              buildRadioOption(
                value: PaymentChannel.aliPay.payChannelType,
                icon: AssetImage('zhifubao'.assetPng),
                text: PaymentChannel.aliPay.payChannelName,
2caf5896   吴启风   feat:商品列表图片优化
165
166
                isSelected: bloc.curPaymentChannel.payChannelType ==
                    PaymentChannel.aliPay.payChannelType,
ad37b653   吴启风   feat:1、完成微信支付;2、商...
167
                onSelect: (newValue) {
2879454a   吴启风   feat:调通支付宝支付&游戏列表页
168
                  bloc.add(ChangePaymentChannelEvent(PaymentChannel.aliPay));
4224b3f8   吴启风   feat:支付详情页ui
169
170
                },
              ),
ad37b653   吴启风   feat:1、完成微信支付;2、商...
171
172
173
174
175
              const SizedBox(height: 20.0),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  RichText(
2caf5896   吴启风   feat:商品列表图片优化
176
177
178
179
180
181
182
183
184
185
186
187
188
189
                    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、商...
190
191
192
193
                  ),
                  // 确认支付按钮
                  GestureDetector(
                    onTap: () {
2caf5896   吴启风   feat:商品列表图片优化
194
195
                      bloc.add(
                          DoPayEvent(bloc.productData, bloc.curPaymentChannel));
ad37b653   吴启风   feat:1、完成微信支付;2、商...
196
197
198
199
200
201
202
203
                    },
                    child: Image(
                      width: 105.w,
                      height: 45.h,
                      image: AssetImage('btn_pay'.assetPng),
                    ),
                  )
                ],
4224b3f8   吴启风   feat:支付详情页ui
204
205
206
207
208
              ),
            ],
          );
        },
      );