sms_recharge_page.dart 10.2 KB
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/sms_info.dart';
import 'package:one_key/pages/my/sms_recharge_item_page.dart';
import 'package:one_key/provider/sms_recharge_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:fluwx/fluwx.dart' as fluwx;
import 'package:crypto/crypto.dart';

class SmsRechargePage extends StatefulWidget {
  final SmsInfoData infoData;
  SmsRechargePage({Key key, this.infoData}) : super(key: key);

  @override
  _SmsRechargePageState createState() => _SmsRechargePageState();
}

class _SmsRechargePageState extends State<SmsRechargePage> {
  ScrollController controller = ScrollController();
  Meals mealsSelected;
  SmsRechargeModel rechargeModel;
  @override
  void initState() {
    super.initState();
    fluwx.weChatResponseEventHandler.listen((res) {
      if (res is fluwx.WeChatPaymentResponse) {
        print("pay :${res.isSuccessful}");
        if (res.errCode == 0) {
          // Utils.showToast('购买成功');
          bus.emit('refreshSmsNum');
          EventBus().emit('changeStatusColor');
          Navigator.pop(context);
        } else if (res.errCode == -1) {
          Utils.showToast('支付错误');
        } else if (res.errCode == -2) {
          Utils.showToast('您已取消支付');
        }
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    rechargeModel = Provider.of<SmsRechargeModel>(context, listen: true);
    return Scaffold(
        backgroundColor: MyColours.color_ffffff,
        appBar: SystemAppBar(
          '短信充值',
          onTap: () {
            EventBus().emit('changeStatusColor');
            Navigator.pop(context);
          },
        ),
        body: WillPopScope(
          onWillPop: () async {
            EventBus().emit('changeStatusColor');
            return true;
          },
          child: Column(
            children: [
              Expanded(
                  child: SingleChildScrollView(
                      controller: controller,
                      child: Padding(
                        padding: EdgeInsets.symmetric(
                            horizontal: ScreenUtil().setWidth(40)),
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            VEmptyView(40),
                            Text(
                              '短信套餐',
                              style: TextStyle(
                                  fontSize: ScreenUtil().setSp(38),
                                  fontWeight: FontWeight.bold),
                            ),
                            VEmptyView(30),
                            Text('购买套餐,使用更划算',
                                style: TextStyle(
                                    fontSize: ScreenUtil().setSp(28),
                                    color: MyColours.color_333333)),
                            ListView.builder(
                              shrinkWrap: true,
                              controller: controller,
                              physics: NeverScrollableScrollPhysics(),
                              padding: EdgeInsets.symmetric(
                                  vertical: ScreenUtil().setWidth(40)),
                              itemBuilder: (BuildContext contxt, int index) {
                                return SmsRechargeItemPage(
                                    meals: widget.infoData.meals[index],
                                    callback: () {
                                      for (Meals item
                                          in widget.infoData.meals) {
                                        item.selected = false;
                                      }
                                      setState(() {
                                        widget.infoData.meals[index].selected =
                                            true;
                                        mealsSelected =
                                            widget.infoData.meals[index];
                                      });
                                    });
                              },
                              itemCount: widget.infoData.meals.length,
                              scrollDirection: Axis.vertical,
                            )
                          ],
                        ),
                      ))),
              Container(
                height: ScreenUtil().setWidth(160),
                width: double.infinity,
                padding:
                    EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(40)),
                decoration: BoxDecoration(
                    border: Border(
                        top: BorderSide(
                  width: ScreenUtil().setWidth(2),
                  color: MyColours.color_E0E0E0,
                ))),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Expanded(
                        child: Text(
                            mealsSelected == null
                                ? '剩余${widget.infoData.lastNum}条短信,请及时充值以保证正常使用'
                                : '${mealsSelected.price}元',
                            // maxLines: 2,
                            style: mealsSelected == null
                                ? TextStyle(
                                    fontSize: ScreenUtil().setSp(28),
                                    color: MyColours.color_333333)
                                : TextStyle(
                                    fontSize: ScreenUtil().setSp(36),
                                    fontWeight: FontWeight.bold))),
                    HEmptyView(80),
                    RoundButton(
                      radius: ScreenUtil().setWidth(10),
                      text: '购买',
                      fontSize: 34,
                      width: ScreenUtil().setWidth(160),
                      height: ScreenUtil().setWidth(70),
                      textColor: MyColours.color_F0F0F0,
                      onPressed: () async {
                        if (mealsSelected == null) {
                          Utils.showToast('请选择您要购买的短信套餐');
                          return;
                        }
                        //1.接口请求微信支付所需参数
                        //2.成功后掉起微信支付
                        Map<String, String> params = {
                          'sellerid':
                              Provider.of<UserModel>(context, listen: false)
                                  .user
                                  .sellerid,
                          'meal_id': mealsSelected.id,
                          // 'price': '0.01'
                          'price': mealsSelected.price
                        };
                        bool success = await rechargeModel.getWechatPayInfo(
                            context, params);
                        if (success) {
                          print(rechargeModel.sunModel.package.substring(10));
                          Map<String, String> str = {
                            'appid': rechargeModel.sunModel.appId,
                            'partnerid': '1489405762',
                            'prepayid':
                                rechargeModel.sunModel.package.substring(10),
                            'timestamp': rechargeModel.sunModel.timeStamp,
                            'noncestr': rechargeModel.sunModel.nonceStr,
                            'package': 'Sign=WXPay',
                            // 'signtype': rechargeModel.sunModel.signType
                          };

                          // String str =
                          // '${rechargeModel.sunModel.appId}\n${rechargeModel.sunModel.timeStamp}\n${rechargeModel.sunModel.nonceStr}\n${rechargeModel.sunModel.package.substring(10)}\n';
                          String sign = Utils.keySort(str);

                          // var content = utf8.encode(signtemp);
                          // String sign = base64Encode(content);
                          print(sign);
                          print(rechargeModel.sunModel.paySign);

                          //掉起微信支付
                          fluwx
                              .payWithWeChat(
                                  // appId: 'wx85aa3cdd0f791e65',
                                  // appId: 'wx71921f840e8f1c34',
                                  appId: rechargeModel.sunModel.appId,
                                  partnerId: '1489405762',
                                  prepayId: rechargeModel.sunModel.package
                                      .substring(10),
                                  packageValue: 'Sign=WXPay',
                                  nonceStr: rechargeModel.sunModel.nonceStr,
                                  timeStamp: int.parse(
                                      rechargeModel.sunModel.timeStamp),
                                  // sign: sign
                                  sign: sign,
                                  // signType: rechargeModel.sunModel.signType
                                  // signType: rechargeModel.sunModel.signType)
                                  )
                              .then((data) {
                            print("---》$data");
                          }).catchError((error) {
                            print(error.toString());
                          });
                        } else {
                          print('fffff');
                          //给用户提示错误
                        }
                      },
                      isBold: true,
                    ),
                  ],
                ),
              )
            ],
          ),
        ));
  }
}