import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:fluwx/fluwx.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/wx_pay.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/min.dart'; import 'package:huixiang/view_widget/item_input_widget.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:huixiang/view_widget/round_button.dart'; import 'package:shared_preferences/shared_preferences.dart'; class RechargePage extends StatefulWidget { @override State createState() { return _RechargePage(); } } class _RechargePage extends State { ApiService apiService; TextEditingController controller = TextEditingController(); Color color = Colors.black; @override void initState() { super.initState(); SharedPreferences.getInstance().then((value) { apiService = ApiService(Dio(), context: context, token: value.getString("token"), pay: true); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text( S.of(context).chongzhi, style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold, fontSize: 18.sp, ), ), centerTitle: false, backgroundColor: Color(0xFFFFFFFF), elevation: 0, leading: GestureDetector( onTap: () { Navigator.of(context).pop(); }, child: Container( alignment: Alignment.centerRight, margin: EdgeInsets.only(left: 10.w), padding: EdgeInsets.all(6), child: Icon( Icons.arrow_back_ios, color: Colors.black, size: 24, ), ), ), titleSpacing: 2, leadingWidth: 56.w, ), body: SingleChildScrollView( physics: BouncingScrollPhysics(), child: Container( child: Column( children: [ ItemInputWidget( S.of(context).qingshuruchongzhijine, hintText: "", controller: controller, padding: EdgeInsets.all(20), errorText: S.of(context).chongzhizuixiaojine(10), titleColor: Color(0xFF727272), errorTextColor: Color(0xFF32A060), radius: 8, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 27.sp, color: color, ), inputLimit: 12, textInputType: TextInputType.number, textInputFormatter: FilteringTextInputFormatter.digitsOnly, onChanged: (value) { if (value != null && value != "" && double.tryParse(value) < 10) { color = Colors.red; } else { color = Colors.black; } setState(() {}); }, ), Container( width: double.infinity, margin: EdgeInsets.only( left: 20.w, right: 20.w, top: 12.h, bottom: 4.h, ), padding: EdgeInsets.only( left: 20.w, right: 16.w, top: 20.h, bottom: 20.h, ), decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Color(0x000000).withAlpha(25), offset: Offset(0, 1), blurRadius: 12.0, ), ], color: Colors.white, borderRadius: BorderRadius.all( Radius.circular(4), ), ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only(bottom: 16.h), child: Text( S.of(context).zhifufangshi, style: TextStyle( fontSize: 16.sp, color: color, fontWeight: FontWeight.bold, ), ), ), GestureDetector( onTap: () { setState(() { checkIndex = 0; }); }, child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.asset("assets/image/icon_alipay.png"), Expanded( flex: 1, child: Padding( padding: EdgeInsets.only(left: 8.w, bottom: 20.h), child: Text( S.of(context).zhifubao, style: TextStyle( fontSize: 14.sp, color: Color(0xff353535), ), ), ), ), checkView(0), ], ), ), GestureDetector( onTap: () { setState(() { checkIndex = 1; }); }, child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.asset("assets/image/icon_we_chat.png"), Expanded( flex: 1, child: Padding( padding: EdgeInsets.only(left: 8.w), child: Text(S.of(context).weixinzhifu, style: TextStyle( fontSize: 14.sp, color: Color(0xff353535), )), ), ), checkView(1), ], ), ), ], ), ), InkWell( onTap: () { recharge(); }, child: Container( margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 26.h), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, children: [ RoundButton( width: double.infinity, height: 46.h, text: S.of(context).querenchongzhi, textColor: Colors.white, fontSize: 14.sp, backgroup: Color(0xff32A060), fontWeight: FontWeight.bold, ), ], ), ), ), ], ), ), ), ); } var checkIndex = 0; Widget checkView(var index) { return Container( padding: EdgeInsets.only(right: 16.w), alignment: Alignment.center, child: Image.asset( checkIndex != index ? "assets/image/icon_radio_unselected.png" : "assets/image/icon_radio_selected.png", width: 15.w, height: 15.h, ), ); } recharge() async { String money = controller.text; if (money == null || money == "") { SmartDialog.showToast(S.of(context).qingshuruchongzhijine); return; } int amount = int.tryParse(money); if (checkIndex == 1) { if (!(await Min.isInitialize())) { // 小程序的微信支付和app的充值支付使用同一个WXPayEntryActivity回调, // 然而充值时小程序未初始化会导致回调内部代码调用getPackage空指针, // 故而在此初始化一下 await Min.initialize(); } BaseData baseData = await apiService.recharge({"amount": amount, "rechargeType": 2}); if (baseData != null && baseData.isSuccess) { WxPay wxPay = WxPay.fromJson(baseData.data); await registerWxApi(appId: wxPay.appId, doOnAndroid: true, universalLink: "https://hx.lotus-wallet.com/app/"); payWithWeChat( appId: wxPay.appId, partnerId: wxPay.partnerId, prepayId: wxPay.prepayId, packageValue: wxPay.packageValue, nonceStr: wxPay.nonceStr, timeStamp: int.tryParse(wxPay.timeStamp), sign: wxPay.sign); weChatResponseEventHandler.listen((event) async { print("payCallback: ${event.errCode}"); }); } } } }