|
- import 'dart:io';
-
- import 'package:chat/data/UserData.dart';
- import 'package:chat/data/constants.dart';
- import 'package:chat/generated/i18n.dart';
- import 'package:chat/home/MoneyPage.dart';
- import 'package:chat/models/money_change.dart';
- import 'package:chat/utils/app_navigator.dart';
- import 'package:dio/dio.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart';
- import 'package:provider/provider.dart';
- import 'package:url_launcher/url_launcher.dart';
-
- import 'HttpUtil.dart';
- import 'LoadingDialog.dart';
- import 'ShadowButton.dart';
- import 'TokenMgr.dart';
- import 'package:fluwx_no_pay/fluwx_no_pay.dart' as fluwx;
-
- class PayWayContent extends StatefulWidget {
- @required
- final goodsId;
- @required
- final money;
- PayWayContent({Key key, this.goodsId, this.money}) : super(key: key);
-
- PayWayContentState createState() => PayWayContentState();
- }
-
- class PayWay {
- static const int WxApp = 0; //微信app支付
- static const int ApplePay = 1; //苹果支付
- static const int GooglePay = 2; //谷歌支付
- static const int WxH5 = 3; //微信h5支付
- static const int Paypal = 4; //paypal支付
- static const int ShareToOther = 5; //微信他人代付
- }
-
- // enum PayWay { wx, apple, google, h5, paypal, shareToOther }
-
- class PayWayContentState extends State<PayWayContent> {
- int payWay = PayWay.WxH5;
- Widget _buildTip() {
- return Container(
- margin: EdgeInsets.only(bottom: 5),
- padding: EdgeInsets.only(top: 10, left: 10, right: 10),
- decoration:
- BoxDecoration(border: Border(bottom: Constants.GreyBorderSide)),
- child: Column(
- children: <Widget>[
- InkWell(
- onTap: () {
- Navigator.of(context).pop();
- },
- child: Align(
- alignment: Alignment.centerRight,
- child: Icon(
- IconData(
- 0xe679,
- fontFamily: 'iconfont',
- ),
- size: 16,
- color: const Color(0xFF969696),
- )),
- ),
- Container(
- alignment: Alignment.center,
- margin: EdgeInsets.only(bottom: 16),
- child: Text(
- I18n.of(context).confirm_pay,
- textScaleFactor: 1.0,
- style: TextStyle(fontSize: 15),
- ),
- ),
- Container(
- margin: EdgeInsets.only(bottom: 19),
- alignment: Alignment.center,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- Text(
- UserData().language == LanguageType.SimplifiedChinese
- ? '¥'
- : '₫',
- textScaleFactor: 1.0,
- style: TextStyle(fontSize: 20, fontWeight: FontWeight.w700),
- ),
- Text(
- ' ${widget.money}',
- textScaleFactor: 1.0,
- style: TextStyle(fontSize: 28, fontWeight: FontWeight.w700),
- )
- ],
- ),
- )
- ],
- ),
- );
- }
-
- Widget _buildPayWayItem(img, name, radio, callback) {
- return InkWell(
- onTap: callback,
- child: Container(
- child: Row(
- children: <Widget>[
- ClipRRect(
- borderRadius: BorderRadius.all(Radius.circular(5)),
- child: Image.asset(
- img,
- height: 26,
- )),
- Padding(
- padding: EdgeInsets.only(left: 15),
- child: Text(
- name,
- textScaleFactor: 1.0,
- style: TextStyle(fontSize: 14),
- ),
- ),
- Expanded(
- child:
- Container(alignment: Alignment.centerRight, child: radio),
- )
- ],
- ),
- ));
- }
-
- void addGoods() async {
- var data = {
- "userid": UserData().basicInfo.userId,
- "moneytype": 1,
- 'gid': widget.goodsId,
- "payway": payWay,
- };
- data['sign'] = TokenMgr().getSign(data);
- data['isenable'] = Constants.isSandbox ? 0 : 1;
- Response res = await HttpUtil().post('order/add/goods', data: data);
- Map resData = res.data;
- print('resData: $resData');
- if (resData['code'] == 0) {
- Navigator.of(context).pop();
- var url = resData['data']['Weburl'];
- UserData().isBannerStatus = true;
- if (payWay == PayWay.Paypal) {
- AppNavigator.pushWebview(context, url);
- } else if (payWay == PayWay.WxH5) {
- if (await canLaunch(url)) {
- await launch(url);
- } else {
- throw 'Could not launch $url';
- }
- } else if (payWay == PayWay.ShareToOther) {
- shareToOther(url);
- }
-
- setState(() {});
- }
- // var data = {
- // "userid": UserData().basicInfo.userId,
- // "moneytype": 1,
- // 'gid': widget.goodsId,
- // "payway": payWay,
- // };
- // data['sign'] = TokenMgr().getSign(data);
-
- // Response res = await HttpUtil().post('order/add/goods', data: data);
- // Map resData = res.data;
- // if (resData['code'] == 0) {
- // fluwx.pay(
- // appId: resData['data']['WxPayData']['appid'],
- // partnerId: resData['data']['WxPayData']['mch_id'],
- // prepayId: resData['data']['WxPayData']['prepay_id'],
- // packageValue: 'Sign=WXPay',
- // nonceStr: resData['data']['WxPayData']['nonce_str'],
- // timeStamp: int.parse(resData['data']['WxPayData']['timestamp']),
- // sign: resData['data']['WxPayData']['sign'],
- // );
- // setState(() {});
- // }
- }
-
- //确定按钮
- Widget _buildConfirmButton() {
- Text text = new Text(I18n.of(context).determine,
- textScaleFactor: 1.0,
- style: TextStyle(
- fontSize: 18,
- color: Colors.white,
- textBaseline: TextBaseline.ideographic));
-
- LinearGradient gradientColor = new LinearGradient(colors: <Color>[
- Colors.blueAccent,
- Colors.blueAccent,
- ]);
- // callback() {
- // if (payWay == PayWay.WxH5 || payWay == PayWay.Paypal) {
- // addGoods();
- // }
- // if (payWay == PayWay.ShareToOther) {
- // shareToOther();
- // }
- // }
-
- return new Container(
- margin: EdgeInsets.only(top: 10, bottom: 10),
- alignment: Alignment.center,
- height: 44,
- width: 250,
- child: ShadowButton().builder(gradientColor, text, addGoods),
- );
- }
-
- shareToOther(url) {
- fluwx.WeChatShareWebPageModel model = fluwx.WeChatShareWebPageModel(
- scene: fluwx.WeChatScene.SESSION,
- webPage: url,
- title: '点我代付[${widget.money}元]',
- thumbnail:
- "http://testcyhd.chengyouhd.com/Upload/default/ic_launcher.png",
- description: '[${UserData().basicInfo.nickName}]正在购买H币,点击帮我支付吧');
- fluwx.share(model);
- }
-
- Widget _buildPayWay() {
- Widget wxButton = Radio(
- value: PayWay.WxH5,
- groupValue: payWay, //当value和groupValue一致的时候则选中
- onChanged: (T) {
- setState(() {
- payWay = PayWay.WxH5;
- });
- });
-
- Widget shareToOther = Radio(
- value: PayWay.ShareToOther,
- groupValue: payWay, //当value和groupValue一致的时候则选中
- onChanged: (T) {
- setState(() {
- payWay = PayWay.ShareToOther;
- });
- });
- // Widget paypalButton = Radio(
- // value: PayWay.Paypal,
- // groupValue: payWay, //当value和groupValue一致的时候则选中
- // onChanged: (T) {
- // setState(() {
- // payWay = PayWay.Paypal;
- // });
- // });
- return Container(
- margin: EdgeInsets.only(left: 30, right: 20),
- child: Column(
- children: <Widget>[
- _buildPayWayItem('assets/images/login/vip_wx.png',
- I18n.of(context).wechat_pay, wxButton, () {
- setState(() {
- payWay = PayWay.WxApp;
- });
- }),
- UserData().deviceLanguage == LanguageType.SimplifiedChinese ||
- UserData().deviceLanguage == LanguageType.TraditionalChinese
- ? _buildPayWayItem('assets/images/login/vip_other.png',
- I18n.of(context).other_pay, shareToOther, () {
- setState(() {
- payWay = PayWay.ShareToOther;
- });
- })
- : Container(),
- //todo paypal
- // _buildPayWayItem('assets/images/login/vip_wx.png',
- // 'Paypal', paypalButton, () {
- // setState(() {
- // payWay = PayWay.paypal.index;
- // });
- // }),
-
- _buildConfirmButton(),
- ],
- ),
- );
- }
-
- @override
- void initState() {
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return new Material(
- type: MaterialType.transparency,
- child: new Center(
- child: new SizedBox(
- width: 288.25,
- height: 286.6,
- child: new Container(
- decoration: ShapeDecoration(
- color: Color(0xffffffff),
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.all(
- Radius.circular(8.0),
- ),
- ),
- ),
- child: new Column(
- children: <Widget>[
- _buildTip(),
- _buildPayWay(),
- ],
- ),
- ),
- ),
- ),
- );
- }
- }
-
- class ChargeMoney {
- static List goodsList = [];
-
- ///钱包-充值 item
- static Widget _buildItem(
- leftStr, rightStr, goodsId, appleProductId, BuildContext context) {
- return Container(
- height: 55,
- margin: EdgeInsets.only(left: 15, right: 15),
- decoration: BoxDecoration(
- border: Border(
- bottom: BorderSide(width: 1, color: Constants.DividerLineColor))),
- child: Row(
- children: <Widget>[
- Container(
- alignment: Alignment.center,
- decoration: BoxDecoration(
- borderRadius: BorderRadius.all(Radius.circular(20))),
- height: 30,
- width: 30,
- child: Image.asset('assets/images/coin.png'),
- ),
- Padding(
- padding: EdgeInsets.only(left: 15),
- child: Text(
- '$leftStr',
- textScaleFactor: 1.0,
- style: TextStyle(fontSize: 14.41),
- ),
- ),
- Expanded(
- child: Align(
- alignment: Alignment.centerRight,
- child: InkWell(
- highlightColor: Colors.transparent,
- radius: 0,
- onTap: () {
- if (Platform.isIOS && UserData().bannerZF == 1) {
- /// 是ios并且苹果内购开关打开
- MoneyPageState.currentGoodsId = goodsId.toString();
- // showToast('goodsId:$goodsId money:$rightStr appleProductId: $appleProductId');
- ChargeMoney.requestPurchase(
- appleProductId.toString(), context);
- } else {
- showDialog(
- context: context,
- builder: (BuildContext context) {
- return PayWayContent(
- goodsId: goodsId,
- money: rightStr,
- );
- });
- }
- },
- child: Container(
- alignment: Alignment.center,
- decoration: BoxDecoration(
- color: Constants.BlueTextColor,
- boxShadow: [
- BoxShadow(
- color: Constants.BlueTextColor.withOpacity(0.3),
- offset: Offset(0, 1.5),
- blurRadius: 4.5),
- ],
- borderRadius: BorderRadius.all(
- Radius.circular(Constants.LittleButtonRadius))),
- width: 75.85,
- height: 28.1,
- child: Text(
- UserData().language == LanguageType.SimplifiedChinese
- ? '¥$rightStr'
- : '₫ ${(rightStr / 1000).toInt()}K',
- textScaleFactor: 1.0,
- textAlign: TextAlign.center,
- style: TextStyle(color: Colors.white, fontSize: 13.45),
- ),
- ),
- ))),
- ],
- ),
- );
- }
-
- ///苹果必须先拉取商品列表FlutterInappPurchase.instance.getProducts ,才可以进行购买
- static void initIAP(List<String> iosProductIdList) async {
- print('initIAP ---初始化ios 内购商品列表-start');
- List<IAPItem> iapItem =
- await FlutterInappPurchase.instance.getProducts(iosProductIdList);
- print('initIAP ---初始化ios 内购商品列表-end');
- print('iosProductIdList length ${iapItem.length}');
- }
-
- static void showChargeSheet(BuildContext context, callback) {
- HttpUtil().getMoneyInfo(context, (data) {
- goodsList = data;
- List<Widget> list = [];
-
- List<String> iosProductIdList = [];
-
- list.addAll(goodsList.map((data) {
- print('iosProductIdList data #### : data');
- iosProductIdList.add(data['Id'].toString());
- return _buildItem(
- data['Amount'], data['Price'], data['Gid'], data['Id'], context);
- }).toList());
-
- if (Platform.isIOS) {
- initIAP(iosProductIdList);
-
- ///初始化ios内购
- }
-
- showModalBottomSheet(
- context: context,
- builder: (BuildContext context) {
- return StatefulBuilder(
- builder: (BuildContext context, setBottomSheetState) {
- return SafeArea(
- child: Container(
- height: 390,
- child: Stack(
- children: <Widget>[
- Container(
- margin: EdgeInsets.only(top: 55),
- child: ListView(
- children: list,
- ),
- ),
- Container(
- height: 55,
- child: Row(
- children: <Widget>[
- Padding(
- padding: EdgeInsets.only(left: 20),
- child: Text(
- I18n.of(context).recharge,
- textScaleFactor: 1.0,
- style: TextStyle(fontSize: 18),
- ),
- ),
- Expanded(
- child: Align(
- alignment: Alignment.centerRight,
- child: Text(
- I18n.of(context).mask_coin +
- I18n.of(context)
- .available_balance
- .replaceFirst('/s1', ': '),
- textScaleFactor: 1.0,
- style: TextStyle(
- color: const Color(0xFF595959),
- fontSize: 13),
- ),
- ),
- ),
- Container(
- alignment: Alignment.centerRight,
- child: Consumer<MoneyChangeProvider>(
- builder: (context,
- MoneyChangeProvider counter, child) =>
- Text(
- counter.money.toString(),
- textScaleFactor: 1.0,
- style: TextStyle(
- color: Colors.red, fontSize: 15),
- ),
- ),
- ),
- Container(
- height: 15,
- margin: EdgeInsets.only(left: 12, right: 10),
- decoration: BoxDecoration(
- border: Border(
- left: BorderSide(
- color: const Color(0xFF595959)))),
- ),
- InkWell(
- onTap: () {
- HttpUtil().getWealth(context, (data) {
- callback();
- Provider.of<MoneyChangeProvider>(context)
- .initMoney(data['CoinValue']);
- setBottomSheetState(() {});
- });
- },
- child: Container(
- padding: EdgeInsets.only(right: 6),
- child: Icon(
- Icons.refresh,
- size: 20,
- ),
- )),
- ],
- ),
- ),
- ],
- )),
- );
- },
- );
- },
- ).then((val) {});
- });
- }
-
- /// ios内购 请求支付
- static void requestPurchase(String productId, BuildContext context) async {
- showDialog(
- context: context,
- barrierDismissible: false,
- builder: (BuildContext context) {
- return LoadingDialog();
- });
- print('_requestPurchase >>>>>>>>>> -- $productId');
- // productId = '1488435000';
- await FlutterInappPurchase.instance
- .requestPurchase(productId)
- .then((value) {
- print('支付结果: $value');
- }).catchError((e) {
- print('支付出错结果::: $e');
- });
- }
- }
|