You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1238 lines
58 KiB
1238 lines
58 KiB
import 'dart:convert'; |
|
|
|
import 'package:flutter/material.dart'; |
|
import 'package:dio/dio.dart'; |
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
|
import 'package:fluwx/fluwx.dart'; |
|
import 'package:huixiang/generated/l10n.dart'; |
|
import 'package:huixiang/data/base_data.dart'; |
|
import 'package:huixiang/data/user_info.dart'; |
|
import 'package:huixiang/data/wx_pay.dart'; |
|
import 'package:huixiang/retrofit/retrofit_api.dart'; |
|
import 'package:huixiang/utils/flutter_utils.dart'; |
|
import 'package:huixiang/utils/font_weight.dart'; |
|
import 'package:huixiang/view_widget/custom_image.dart'; |
|
import 'package:huixiang/view_widget/my_appbar.dart'; |
|
import 'package:huixiang/view_widget/receiving_method_dialog.dart'; |
|
import 'package:shared_preferences/shared_preferences.dart'; |
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|
|
|
class ExchangeOrderPage extends StatefulWidget { |
|
final Map<String, dynamic> arguments; |
|
|
|
///兑换订单 |
|
ExchangeOrderPage({required this.arguments}); |
|
|
|
@override |
|
State<StatefulWidget> createState() { |
|
return _ExchangeOrderPage(); |
|
} |
|
} |
|
|
|
class _ExchangeOrderPage extends State<ExchangeOrderPage> { |
|
ApiService? apiService; |
|
int buyNum = 1; |
|
var checkIndex = 3; |
|
UserInfo? userInfo; |
|
dynamic payListen; |
|
dynamic mBalance = 0; |
|
String? happyBean; |
|
String? points; |
|
|
|
Fluwx fluwx = Fluwx(); |
|
|
|
@override |
|
void initState() { |
|
super.initState(); |
|
|
|
SharedPreferences.getInstance().then((value) { |
|
apiService = ApiService(Dio(), context: context, token: value.getString("token")); |
|
String? user = value.getString('user'); |
|
if (user?.isNotEmpty ?? false) { |
|
UserInfo userInfo = UserInfo.fromJson(jsonDecode(user!)); |
|
points = userInfo.points; |
|
happyBean = userInfo.happyBean; |
|
} |
|
queryUserBalance(); |
|
}); |
|
|
|
fluwx.addSubscriber((event) async { |
|
print("payCallback: ${event.errCode}"); |
|
if (event.errCode == 0) { |
|
String realPay = handleNeedPay(); |
|
Navigator.of(context).popAndPushNamed( |
|
'/router/exchange_order_success_page', |
|
arguments: { |
|
"id": widget.arguments["goodsId"], |
|
"price": realPay.contains("积分") |
|
? realPay.substring(0, realPay.indexOf("积分")) |
|
: "0", |
|
"points": points, |
|
"happyBean":happyBean, |
|
"realPay": realPay, |
|
"payChannel": widget.arguments["payChannel"], |
|
}, |
|
); |
|
} else { |
|
SmartDialog.showToast("支付失败", alignment: Alignment.center); |
|
return; |
|
} |
|
}); |
|
} |
|
|
|
@override |
|
void dispose() { |
|
super.dispose(); |
|
if (payListen != null) payListen.cancel(); |
|
} |
|
|
|
queryUserBalance() async { |
|
BaseData<UserInfo>? baseData = await apiService?.queryInfo().catchError((onError) {}); |
|
if (baseData?.isSuccess ?? false) { |
|
userInfo = baseData!.data; |
|
mBalance = double.tryParse("${userInfo?.money}") ?? 0; |
|
if (mounted) setState(() {}); |
|
} |
|
} |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
appBar: MyAppBar( |
|
title: S.of(context).dingdanqueren, |
|
titleColor: Colors.black, |
|
titleSize: 18.sp, |
|
background: Color(0xFFFAFAFA), |
|
leadingColor: Colors.black, |
|
), |
|
body: Stack( |
|
children: [ |
|
SingleChildScrollView( |
|
physics: BouncingScrollPhysics(), |
|
child: Column( |
|
children: [ |
|
// widget.arguments["useTyped"] == 1 ? |
|
Container( |
|
margin: EdgeInsets.only( |
|
left: 16, right: 16, top: 26, bottom: 8, |
|
), |
|
padding: EdgeInsets.all(20), |
|
decoration: BoxDecoration( |
|
color: Colors.white, |
|
boxShadow: [ |
|
BoxShadow( |
|
color: Colors.black.withAlpha(12), |
|
offset: Offset(0, 3), |
|
blurRadius: 14, |
|
spreadRadius: 0, |
|
) |
|
], |
|
borderRadius: BorderRadius.all( |
|
Radius.circular(8), |
|
), |
|
), |
|
child: Column( |
|
children: [ |
|
Row( |
|
children: [ |
|
Image.asset( |
|
"assets/image/icon_order_exchange_info.webp", |
|
width: 24, |
|
height: 24, |
|
), |
|
SizedBox(width: 4), |
|
Text( |
|
S.of(context).duihuanxinxi, |
|
style: TextStyle( |
|
fontWeight: FontWeight.bold, |
|
fontSize: 16, |
|
color: Color(0xFF353535), |
|
), |
|
), |
|
], |
|
), |
|
SizedBox( |
|
height: 18.h, |
|
), |
|
GestureDetector( |
|
onTap: () { |
|
setState(() { |
|
// showAlertDialog(); |
|
}); |
|
}, |
|
child: Row( |
|
children: [ |
|
Text( |
|
S.of(context).lingqufangshi, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xFF353535), |
|
), |
|
), |
|
SizedBox( |
|
width: 12.w, |
|
), |
|
Expanded( |
|
child: Text( |
|
widget.arguments["useTyped"] == 1 |
|
? S.of(context).ziti |
|
: widget.arguments["useTyped"] == 2 |
|
? S.of(context).peisong |
|
: S.of(context).xianshangfafang, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xFF353535), |
|
), |
|
), |
|
), |
|
// Icon( |
|
// Icons.keyboard_arrow_right, |
|
// size: 16, |
|
// color: Color(0xFF32A060), |
|
// ), |
|
], |
|
), |
|
), |
|
Visibility( |
|
child: SizedBox( |
|
height: 13.h, |
|
), |
|
visible: widget.arguments["useTyped"] != 3, |
|
), |
|
Visibility( |
|
child: Row( |
|
children: [ |
|
Text( |
|
widget.arguments["useTyped"] == 1 ? S.of(context).zitidizhi : "收货地址", |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xFF353535), |
|
), |
|
), |
|
SizedBox( |
|
width: 12.w, |
|
), |
|
Expanded( |
|
child: GestureDetector( |
|
onTap: () { |
|
toAddressPicker(); |
|
}, |
|
child: Row( |
|
mainAxisAlignment: MainAxisAlignment.end, |
|
crossAxisAlignment: |
|
CrossAxisAlignment.end, |
|
mainAxisSize: MainAxisSize.min, |
|
children: [ |
|
Expanded( |
|
child: Text( |
|
(address?.isNotEmpty ?? false) |
|
? (address ?? "") |
|
: widget.arguments["useTyped"] == 1 |
|
? S.of(context).qingxuanzhemendian |
|
: widget.arguments["useTyped"] == 2 |
|
? S.of(context).qingxuanzeshouhuodizhi |
|
: S.of(context).xuni, |
|
overflow: TextOverflow.ellipsis, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xFF32A060), |
|
), |
|
), |
|
flex: 1, |
|
), |
|
Icon( |
|
Icons.keyboard_arrow_right, |
|
size: 16, |
|
color: Color(0xFF32A060), |
|
), |
|
], |
|
), |
|
), |
|
flex: 1, |
|
), |
|
], |
|
), |
|
visible: widget.arguments["useTyped"] != 3, |
|
), |
|
SizedBox( |
|
height: 12.h, |
|
), |
|
Row( |
|
children: [ |
|
Visibility( |
|
visible: widget.arguments["useTyped"] != 3, |
|
child: Text( |
|
widget.arguments["useTyped"] == 1 ? S.of(context).zitishijian : "发货时间", |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xFF353535), |
|
), |
|
), |
|
), |
|
Visibility( |
|
visible: widget.arguments["useTyped"] != 3, |
|
child: SizedBox( |
|
width: 12.w, |
|
), |
|
), |
|
Text( |
|
widget.arguments["useTyped"] == 1 |
|
? S.of(context).duihuanhouwugegongzuori |
|
: widget.arguments["useTyped"] == 2 |
|
? S.of(context).duihuanhoufahuo |
|
: S.of(context).feishiwushangpin, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: widget.arguments["useTyped"] == 3 |
|
? Color(0xFF32A060) |
|
: Color(0xFF353535), |
|
), |
|
), |
|
], |
|
), |
|
], |
|
), |
|
), |
|
// : |
|
// // Container( |
|
// // margin: |
|
// // EdgeInsets.only(left: 16, right: 16, top: 26, bottom: 8), |
|
// // padding: EdgeInsets.all(20), |
|
// // decoration: BoxDecoration( |
|
// // color: Colors.white, |
|
// // boxShadow: [ |
|
// // BoxShadow( |
|
// // color: Colors.black.withAlpha(12), |
|
// // offset: Offset(0, 3), |
|
// // blurRadius: 14, |
|
// // spreadRadius: 0, |
|
// // ) |
|
// // ], |
|
// // borderRadius: BorderRadius.all(Radius.circular(8)), |
|
// // ), |
|
// // child: Column( |
|
// // mainAxisAlignment: MainAxisAlignment.spaceAround, |
|
// // crossAxisAlignment: CrossAxisAlignment.start, |
|
// // children: [ |
|
// // Row( |
|
// // children: [ |
|
// // Image.asset( |
|
// // "assets/image/icon_order_exchange_info.webp", |
|
// // width: 24, |
|
// // height: 24, |
|
// // ), |
|
// // SizedBox(width: 4), |
|
// // Text( |
|
// // S.of(context).duihuanxinxi, |
|
// // style: TextStyle( |
|
// // fontWeight: FontWeight.bold, |
|
// // fontSize: 16, |
|
// // color: Color(0xFF353535)), |
|
// // ), |
|
// // ], |
|
// // ), |
|
// // SizedBox( |
|
// // height: 18.h, |
|
// // ), |
|
// // Row( |
|
// // children: [ |
|
// // Text( |
|
// // S.of(context).lingqufangshi, |
|
// // style: TextStyle( |
|
// // fontSize: 14.sp, |
|
// // color: Color(0xFF353535), |
|
// // ), |
|
// // ), |
|
// // SizedBox( |
|
// // width: 12.w, |
|
// // ), |
|
// // Text( |
|
// // widget.arguments["useTyped"] == 1 |
|
// // ? S.of(context).ziti |
|
// // : widget.arguments["useTyped"] == 2 |
|
// // ? S.of(context).peisong |
|
// // : S.of(context).xianshangfafang, |
|
// // style: TextStyle( |
|
// // fontSize: 14.sp, |
|
// // color: Color(0xFF353535), |
|
// // ), |
|
// // ), |
|
// // ], |
|
// // ), |
|
// // SizedBox( |
|
// // height: 12.h, |
|
// // ), |
|
// // Text( |
|
// // "非实物商品兑换后领取到卡包即可使用!", |
|
// // style: TextStyle( |
|
// // fontSize: 14.sp, |
|
// // color: Color(0xFF32A060), |
|
// // fontWeight: MyFontWeight.medium |
|
// // ), |
|
// // ), |
|
// // ], |
|
// // ), |
|
// // ), |
|
// Container( |
|
// margin: EdgeInsets.only( |
|
// left: 16, right: 16, top: 26, bottom: 8), |
|
// padding: EdgeInsets.all(20), |
|
// decoration: BoxDecoration( |
|
// color: Colors.white, |
|
// boxShadow: [ |
|
// BoxShadow( |
|
// color: Colors.black.withAlpha(12), |
|
// offset: Offset(0, 3), |
|
// blurRadius: 14, |
|
// spreadRadius: 0, |
|
// ) |
|
// ], |
|
// borderRadius: |
|
// BorderRadius.all(Radius.circular(8)), |
|
// ), |
|
// child: Column( |
|
// children: [ |
|
// Row( |
|
// children: [ |
|
// Image.asset( |
|
// "assets/image/icon_order_exchange_info.webp", |
|
// width: 24, |
|
// height: 24, |
|
// ), |
|
// SizedBox(width: 4), |
|
// Text( |
|
// S.of(context).duihuanxinxi, |
|
// style: TextStyle( |
|
// fontWeight: FontWeight.bold, |
|
// fontSize: 16, |
|
// color: Color(0xFF353535)), |
|
// ), |
|
// ], |
|
// ), |
|
// SizedBox( |
|
// height: 18.h, |
|
// ), |
|
// GestureDetector( |
|
// onTap: () { |
|
// setState(() { |
|
// showAlertDialog(); |
|
// }); |
|
// }, |
|
// child: Row( |
|
// children: [ |
|
// Text( |
|
// S.of(context).lingqufangshi, |
|
// style: TextStyle( |
|
// fontSize: 14.sp, |
|
// color: Color(0xFF353535), |
|
// ), |
|
// ), |
|
// SizedBox( |
|
// width: 12.w, |
|
// ), |
|
// Expanded( |
|
// child: Text( |
|
// widget.arguments["useTyped"] == 1 |
|
// ? S.of(context).ziti |
|
// : widget.arguments["useTyped"] == 2 |
|
// ? S.of(context).peisong |
|
// : S.of(context).xianshangfafang, |
|
// style: TextStyle( |
|
// fontSize: 14.sp, |
|
// color: Color(0xFF353535), |
|
// ), |
|
// )), |
|
// Icon( |
|
// Icons.keyboard_arrow_right, |
|
// size: 16, |
|
// color: Color(0xFF32A060), |
|
// ), |
|
// ], |
|
// ), |
|
// ), |
|
// Visibility( |
|
// child: SizedBox( |
|
// height: 13.h, |
|
// ), |
|
// visible: widget.arguments["useTyped"] != 3, |
|
// ), |
|
// Visibility( |
|
// child: Row( |
|
// children: [ |
|
// Text( |
|
// "收货地址", |
|
// style: TextStyle( |
|
// fontSize: 14.sp, |
|
// color: Color(0xFF353535), |
|
// ), |
|
// ), |
|
// SizedBox( |
|
// width: 12.w, |
|
// ), |
|
// Expanded( |
|
// child: GestureDetector( |
|
// onTap: () { |
|
// toAddressPicker(); |
|
// }, |
|
// child: Row( |
|
// mainAxisAlignment: |
|
// MainAxisAlignment.end, |
|
// crossAxisAlignment: |
|
// CrossAxisAlignment.end, |
|
// mainAxisSize: MainAxisSize.min, |
|
// children: [ |
|
// Expanded( |
|
// child: Text( |
|
// (address != null && |
|
// address != "") |
|
// ? address |
|
// : widget.arguments[ |
|
// "useTyped"] == |
|
// 1 |
|
// ? S |
|
// .of(context) |
|
// .qingxuanzhemendian |
|
// : widget.arguments[ |
|
// "useTyped"] == |
|
// 2 |
|
// ? S |
|
// .of(context) |
|
// .qingxuanzeshouhuodizhi |
|
// : S |
|
// .of(context) |
|
// .xuni, |
|
// overflow: |
|
// TextOverflow.ellipsis, |
|
// style: TextStyle( |
|
// fontSize: 14.sp, |
|
// color: Color(0xFF32A060), |
|
// ), |
|
// ), |
|
// flex: 1, |
|
// ), |
|
// Icon( |
|
// Icons.keyboard_arrow_right, |
|
// size: 16, |
|
// color: Color(0xFF32A060), |
|
// ), |
|
// ], |
|
// ), |
|
// ), |
|
// flex: 1, |
|
// ), |
|
// ], |
|
// ), |
|
// visible: widget.arguments["useTyped"] != 3, |
|
// ), |
|
// SizedBox( |
|
// height: 12.h, |
|
// ), |
|
// ], |
|
// ), |
|
// ), |
|
Container( |
|
margin: EdgeInsets.only( |
|
left: 16, right: 16, top: 8, bottom: 16, |
|
), |
|
padding: EdgeInsets.all(20), |
|
decoration: BoxDecoration( |
|
color: Colors.white, |
|
boxShadow: [ |
|
BoxShadow( |
|
color: Colors.black.withAlpha(12), |
|
offset: Offset(0, 3), |
|
blurRadius: 14, |
|
spreadRadius: 0, |
|
) |
|
], |
|
borderRadius: BorderRadius.all( |
|
Radius.circular(8), |
|
), |
|
), |
|
child: Column( |
|
children: [ |
|
Row( |
|
children: [ |
|
Image.asset( |
|
"assets/image/icon_order_commodity_info.webp", |
|
width: 24, |
|
height: 24, |
|
), |
|
SizedBox(width: 4), |
|
Text( |
|
S.of(context).duihuanshangpinxiangqing, |
|
style: TextStyle( |
|
fontWeight: FontWeight.bold, |
|
fontSize: 16, |
|
color: Color(0xFF353535), |
|
), |
|
), |
|
], |
|
), |
|
SizedBox( |
|
height: 18, |
|
), |
|
Row( |
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
mainAxisSize: MainAxisSize.max, |
|
children: [ |
|
MImage( |
|
widget.arguments["image"] ?? "", |
|
width: 80, |
|
height: 80, |
|
fit: BoxFit.cover, |
|
errorSrc: "assets/image/default_1.webp", |
|
fadeSrc: "assets/image/default_1.webp", |
|
), |
|
Expanded( |
|
child: Container( |
|
height: 80.h, |
|
margin: EdgeInsets.only(left: 16.w), |
|
child: Column( |
|
mainAxisAlignment: MainAxisAlignment.start, |
|
crossAxisAlignment: CrossAxisAlignment.end, |
|
children: [ |
|
Text( |
|
widget.arguments["name"] ?? "", |
|
maxLines: 2, |
|
overflow: TextOverflow.ellipsis, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
fontWeight: FontWeight.bold, |
|
color: Color(0xFF353535), |
|
), |
|
), |
|
// SizedBox( |
|
// height: 4.h, |
|
// ), |
|
// Text( |
|
// "x1", |
|
// style: TextStyle( |
|
// fontSize: 12.sp, |
|
// color: Color(0xFF727272)), |
|
// ), |
|
], |
|
), |
|
), |
|
flex: 1, |
|
) |
|
], |
|
), |
|
SizedBox( |
|
height: 12.h, |
|
), |
|
Row( |
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Text( |
|
"应付数额", |
|
style: TextStyle( |
|
fontSize: 14, |
|
color: Color(0xFF353535), |
|
fontWeight: MyFontWeight.regular, |
|
), |
|
), |
|
SizedBox( |
|
width: 12, |
|
), |
|
Text( |
|
// widget.arguments["payType"] == 1 |
|
// ? "${(double.parse(widget.arguments["oneBean"] ?? "0") * buyNum).toInt()}印章" |
|
// : (widget.arguments["payType"] == 2 ?"${(double.parse(widget.arguments["onePrice"]) * buyNum).toInt()}积分" |
|
// :((widget.arguments["price"] == null || |
|
// widget.arguments["price"] == "0" |
|
// ? (widget.arguments["oneBean"] != "0" && double.parse(userInfo?.happyBean ?? "0") <= double.parse(widget.arguments["oneBean"] ??"0") |
|
// ? "${AppUtils.calculateDouble(double.parse(widget.arguments["oneBean"] ?? "0") * buyNum)}印章" |
|
// :(widget.arguments["onePrice"] != "0" && double.parse(userInfo?.points ?? "0") <= double.parse(widget.arguments["onePrice"]) |
|
// ?"${AppUtils.calculateDouble(double.parse(widget.arguments["onePrice"]) * buyNum)}积分" |
|
// :"${AppUtils.calculateDouble(double.parse(widget.arguments["oneMoney"]) * buyNum)}元")) |
|
// : "${(double.parse(widget.arguments["price"]) * buyNum).toInt()}积分") + |
|
// (widget.arguments["money"] == null || |
|
// widget.arguments["money"] == |
|
// "0.00" |
|
// ? "" |
|
// : " + ${AppUtils.calculateDouble(double.tryParse(widget.arguments["money"]) * buyNum) ?? 0}元"))), |
|
payableAmount(), |
|
style: TextStyle( |
|
fontSize: 12, |
|
decoration: (widget.arguments["payType"] == 4 && |
|
((widget.arguments["price"] != "0" && widget.arguments["money"] != "0.00" |
|
|| (widget.arguments["oneBean"] ?? "0") != "0" |
|
|| widget.arguments["onePrice"] != "0"))) |
|
? TextDecoration.lineThrough |
|
: TextDecoration.none, |
|
fontFamily: 'JDZhengHT', |
|
color: Color(0xFF32A060), |
|
), |
|
), |
|
], |
|
), |
|
SizedBox( |
|
height: 12, |
|
), |
|
if (widget.arguments["payType"] == 4 && |
|
(widget.arguments["price"] != "0" && |
|
widget.arguments["money"] != "0.00" || |
|
(widget.arguments["oneBean"] ?? "0") != "0" || |
|
widget.arguments["onePrice"] != "0")) |
|
Row( |
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Text( |
|
payableAmount().contains("印章") ? "现金抵扣印章" : "现金抵扣积分", |
|
style: TextStyle( |
|
fontSize: 14, |
|
color: Color(0xFF353535), |
|
fontWeight: MyFontWeight.regular, |
|
), |
|
), |
|
SizedBox( |
|
width: 12, |
|
), |
|
Text( |
|
"${AppUtils.calculateDouble(double.parse("${widget.arguments["oneMoney"]}") * buyNum)}元", |
|
style: TextStyle( |
|
fontSize: 12, |
|
fontFamily: 'JDZhengHT', |
|
color: Colors.black, |
|
), |
|
), |
|
], |
|
), |
|
SizedBox( |
|
height: 12, |
|
), |
|
Row( |
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Text( |
|
"合计", |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xFF353535), |
|
fontWeight: MyFontWeight.regular), |
|
), |
|
SizedBox( |
|
width: 12.w, |
|
), |
|
Text( |
|
handleNeedPay(), |
|
style: TextStyle( |
|
fontFamily: 'JDZhengHT', |
|
fontSize: 12.sp, |
|
color: Color(0xFF32A060)), |
|
), |
|
], |
|
), |
|
], |
|
), |
|
), |
|
// Container( |
|
// margin: EdgeInsets.only(left: 16, right: 16, bottom: 8), |
|
// padding: EdgeInsets.all(20), |
|
// decoration: BoxDecoration( |
|
// color: Colors.white, |
|
// boxShadow: [ |
|
// BoxShadow( |
|
// color: Colors.black.withAlpha(12), |
|
// offset: Offset(0, 3), |
|
// blurRadius: 14, |
|
// spreadRadius: 0, |
|
// ) |
|
// ], |
|
// borderRadius: BorderRadius.all(Radius.circular(8)), |
|
// ), |
|
// child: Column( |
|
// children: [ |
|
// Row( |
|
// children: [ |
|
// Expanded( |
|
// child: Text( |
|
// "兑换数量", |
|
// style: TextStyle( |
|
// fontWeight: MyFontWeight.regular, |
|
// fontSize: 14.sp, |
|
// color: Color(0xFF353535)), |
|
// )), |
|
// InkWell( |
|
// onTap: () { |
|
// setState(() { |
|
// if (buyNum > 1) buyNum -= 1; |
|
// }); |
|
// }, |
|
// child: Image.asset( |
|
// "assets/image/reduce.webp", |
|
// width: 22, |
|
// height: 22, |
|
// ), |
|
// ), |
|
// Container( |
|
// width: 30, |
|
// alignment: Alignment.center, |
|
// child: Text( |
|
// buyNum.toString(), |
|
// style: TextStyle( |
|
// color: Colors.black, |
|
// fontSize: 14.sp, |
|
// fontWeight: MyFontWeight.medium, |
|
// ), |
|
// ), |
|
// ), |
|
// InkWell( |
|
// onTap: () { |
|
// setState(() { |
|
// if (widget.arguments["payType"] == 1 |
|
// ? (double.parse(widget |
|
// .arguments["oneBean"]) * |
|
// (buyNum + 1)) > |
|
// double.parse(happyBean) |
|
// : (widget.arguments["payType"] == 2 |
|
// ? (double.parse(widget.arguments[ |
|
// "onePrice"]) * |
|
// (buyNum + 1)) > |
|
// double.parse(points) |
|
// : (widget.arguments["price"] == |
|
// null || |
|
// widget.arguments["price"] == |
|
// "0" |
|
// ? false |
|
// : (double.parse(widget |
|
// .arguments["price"]) * |
|
// (buyNum + 1)) > |
|
// double.parse(points)))) { |
|
// SmartDialog.showToast("您的积分不足", |
|
// alignment: Alignment.center); |
|
// return; |
|
// } |
|
// buyNum += 1; |
|
// }); |
|
// }, |
|
// child: Image.asset( |
|
// "assets/image/add.webp", |
|
// width: 22, |
|
// height: 22, |
|
// ), |
|
// ), |
|
// ], |
|
// ), |
|
// ], |
|
// ), |
|
// ), |
|
if (widget.arguments["payType"] == 4 || |
|
(widget.arguments["payType"] == 3 && |
|
widget.arguments["money"] != "0.00")) |
|
Container( |
|
width: double.infinity, |
|
margin: EdgeInsets.only( |
|
left: 16.w, |
|
right: 16.w, |
|
top: 12.h, |
|
bottom: 20.h, |
|
), |
|
padding: EdgeInsets.only( |
|
left: 16.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.circular(8), |
|
), |
|
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: Colors.black, |
|
fontWeight: MyFontWeight.regular, |
|
), |
|
), |
|
), |
|
GestureDetector( |
|
onTap: () { |
|
setState(() { |
|
checkIndex = 1; |
|
}); |
|
// widget.payChannelCheck(4); |
|
}, |
|
child: Row( |
|
mainAxisAlignment: MainAxisAlignment.center, |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
checkPayView(1), |
|
Expanded( |
|
child: Container(), |
|
flex: 1, |
|
), |
|
Text( |
|
"¥$mBalance", |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xff353535), |
|
fontFamily: 'JDZhengHT', |
|
fontWeight: MyFontWeight.medium, |
|
), |
|
), |
|
SizedBox( |
|
width: 10, |
|
), |
|
Text( |
|
S.of(context).huixiangqianbao, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xff353535), |
|
fontWeight: MyFontWeight.semi_bold, |
|
), |
|
), |
|
], |
|
), |
|
), |
|
SizedBox( |
|
height: 10.h, |
|
), |
|
// GestureDetector( |
|
// onTap: () { |
|
// setState(() { |
|
// checkIndex = 2; |
|
// }); |
|
// }, |
|
// child: Row( |
|
// mainAxisAlignment: MainAxisAlignment.center, |
|
// crossAxisAlignment: CrossAxisAlignment.center, |
|
// children: [ |
|
// checkPayView(2), |
|
// Expanded( |
|
// child: Container(), |
|
// flex: 1, |
|
// ), |
|
// Text( |
|
// "¥$balance", |
|
// style: TextStyle( |
|
// fontSize: 14.sp, |
|
// color: Color(0xff353535), |
|
// fontWeight: MyFontWeight.semi_bold, |
|
// ), |
|
// ), |
|
// SizedBox( |
|
// width: 10, |
|
// ), |
|
// Text( |
|
// S.of(context).dianpuyue, |
|
// style: TextStyle( |
|
// fontSize: 14.sp, |
|
// color: Color(0xff353535), |
|
// fontWeight: MyFontWeight.semi_bold, |
|
// ), |
|
// ), |
|
// ], |
|
// ), |
|
// ), |
|
SizedBox( |
|
height: 10.h, |
|
), |
|
GestureDetector( |
|
onTap: () { |
|
setState(() { |
|
checkIndex = 3; |
|
}); |
|
}, |
|
child: Row( |
|
mainAxisAlignment: |
|
MainAxisAlignment.spaceBetween, |
|
crossAxisAlignment: CrossAxisAlignment.start, |
|
children: [ |
|
checkPayView(3), |
|
Spacer(), |
|
Image.asset("assets/image/icon_we_chat.webp"), |
|
Padding( |
|
padding: EdgeInsets.only(left: 8.w), |
|
child: Text( |
|
S.of(context).weixinzhifu, |
|
style: TextStyle( |
|
fontSize: 14.sp, |
|
color: Color(0xff353535), |
|
fontWeight: MyFontWeight.semi_bold, |
|
), |
|
), |
|
), |
|
], |
|
), |
|
), |
|
], |
|
), |
|
), |
|
SizedBox(height: 100.h) |
|
], |
|
)), |
|
Align( |
|
alignment: Alignment.bottomCenter, |
|
child: Container( |
|
height: 60.h, |
|
decoration: BoxDecoration( |
|
color: Colors.white, |
|
borderRadius: BorderRadius.circular(45), |
|
), |
|
margin: |
|
EdgeInsets.only(bottom: 20.h, left: 16.w, right: 16.w), |
|
child: Row( |
|
children: [ |
|
Spacer(), |
|
Padding( |
|
padding: EdgeInsets.only(top: 7, right: 16), |
|
child: Column( |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Text( |
|
S.of(context).heji, |
|
style: TextStyle( |
|
fontSize: 12.sp, |
|
fontWeight: MyFontWeight.regular, |
|
color: Colors.black, |
|
), |
|
), |
|
Text( |
|
handleNeedPay(), |
|
style: TextStyle( |
|
fontSize: 16.sp, |
|
fontWeight: MyFontWeight.medium, |
|
color: Color(0xFF32A060), |
|
), |
|
), |
|
], |
|
)), |
|
GestureDetector( |
|
onTap: () { |
|
if (!storeIsSelected) return; |
|
creditOrder(); |
|
}, |
|
child: Container( |
|
width: 103.w, |
|
height: 54.h, |
|
alignment: Alignment.center, |
|
decoration: BoxDecoration( |
|
color: Color(0xFF32A060), |
|
borderRadius: BorderRadius.only( |
|
bottomRight: Radius.circular(45), |
|
topRight: Radius.circular(45), |
|
), |
|
), |
|
child: Text( |
|
widget.arguments["payType"] == 4 || |
|
(widget.arguments["payType"] == 3 && |
|
widget.arguments["money"] != "0.00") |
|
? S.current.jiesuan |
|
: S.current.duihuan, |
|
style: TextStyle( |
|
fontSize: 16.sp, |
|
fontWeight: MyFontWeight.regular, |
|
color: Colors.white, |
|
), |
|
), |
|
), |
|
), |
|
], |
|
), |
|
)) |
|
], |
|
)); |
|
} |
|
|
|
///领取方式弹窗 |
|
showAlertDialog() { |
|
//显示对话框 |
|
showDialog( |
|
context: context, |
|
builder: (BuildContext context) { |
|
return ReceivingMethodDialog(widget.arguments["useTyped"], (value) { |
|
setState(() { |
|
widget.arguments["useTyped"] = value; |
|
}); |
|
}); |
|
}, |
|
); |
|
} |
|
|
|
///应付数额价格显示 |
|
String payableAmount() { |
|
if (widget.arguments["payType"] == 0) return ""; |
|
if (widget.arguments["payType"] == 1) { |
|
return "${(double.parse(widget.arguments["oneBean"] ?? "0") * buyNum).toInt()}印章"; |
|
} else if (widget.arguments["payType"] == 2) { |
|
return "${(double.parse(widget.arguments["onePrice"]) * buyNum).toInt()}积分"; |
|
} else if (widget.arguments["payType"] == 3) { |
|
return "${(double.parse(widget.arguments["price"]) * buyNum).toInt()}积分" + " + ${AppUtils.calculateDouble((double.tryParse(widget.arguments["money"]) ?? 0) * buyNum) ?? 0}元"; |
|
} else if (widget.arguments["payType"] == 4) { |
|
if ((widget.arguments["oneBean"] ?? "0") != "0") { |
|
return "${AppUtils.calculateDouble(double.parse(widget.arguments["oneBean"] ?? "0") * buyNum)}印章"; |
|
} else if (widget.arguments["onePrice"] != "0") { |
|
return "${AppUtils.calculateDouble(double.parse(widget.arguments["onePrice"]) * buyNum)}积分"; |
|
} else if ((widget.arguments["price"] != null || widget.arguments["price"] != "0") && (widget.arguments["money"] != null || widget.arguments["money"] != "0.00")) { |
|
if(widget.arguments["price"] == "0"){ |
|
return "${AppUtils.calculateDouble(double.parse(widget.arguments["oneMoney"]) * buyNum)}元"; |
|
} |
|
return "${(double.parse(widget.arguments["price"]) * buyNum).toInt()}积分" + " + ${AppUtils.calculateDouble((double.tryParse(widget.arguments["money"]) ?? 0) * buyNum)}元"; |
|
} |
|
} |
|
return ""; |
|
} |
|
|
|
///总价支付价格 |
|
String handleNeedPay() { |
|
if (widget.arguments["payType"] == 0) return ""; |
|
if (widget.arguments["payType"] == 1) { |
|
return "${(double.parse(widget.arguments["oneBean"]) * buyNum).toInt()}印章"; |
|
} |
|
if (widget.arguments["payType"] == 2) { |
|
return S.of(context).jifen_( |
|
(double.parse(widget.arguments["onePrice"]) * buyNum).toInt()); |
|
} else if (widget.arguments["payType"] == 3) { |
|
return (widget.arguments["price"] == null || widget.arguments["price"] == "0" |
|
? "" : "${(double.parse(widget.arguments["price"]) * buyNum).toInt()}积分") + |
|
(widget.arguments["money"] == null || widget.arguments["money"] == "0.00" |
|
? "" : " + ${AppUtils.calculateDouble((double.tryParse(widget.arguments["money"]) ?? 0) * buyNum)}元"); |
|
} else if (widget.arguments["payType"] == 4) { |
|
return "${AppUtils.calculateDouble((double.tryParse(widget.arguments["oneMoney"]) ?? 0) * buyNum)}元"; |
|
} |
|
return ""; |
|
} |
|
|
|
Widget checkPayView(var index) { |
|
return Container( |
|
padding: EdgeInsets.only(right: 16.w), |
|
alignment: Alignment.center, |
|
child: Image.asset( |
|
checkIndex != index |
|
? "assets/image/icon_radio_unselected.webp" |
|
: "assets/image/icon_radio_selected.webp", |
|
width: 15.w, |
|
height: 15.h, |
|
), |
|
); |
|
} |
|
|
|
var storeIsSelected = true; |
|
String? storeId; |
|
String? address; |
|
String? userAddressId; |
|
|
|
toAddressPicker() async { |
|
if (widget.arguments["useTyped"] == 1) { |
|
dynamic result = await Navigator.of(context).pushNamed('/router/store_selector_page',arguments: {"creditGoodsId":widget.arguments["goodsId"]}); |
|
if (result == null) return; |
|
storeId = result["id"]; |
|
address = result["address"]; |
|
} else if (widget.arguments["useTyped"] == 2) { |
|
dynamic result = await Navigator.of(context).pushNamed( |
|
'/router/manage_address_page', |
|
arguments: {"isSelector": true}); |
|
if (result == null) return; |
|
userAddressId = result["id"]; |
|
address = result["address"]; |
|
} |
|
setState(() {}); |
|
} |
|
|
|
///创建积分订单 |
|
creditOrder() async { |
|
if (widget.arguments["useTyped"] == 1 && |
|
(storeId == "")) { |
|
SmartDialog.showToast("请选择一个门店", alignment: Alignment.center); |
|
return; |
|
} |
|
if (widget.arguments["useTyped"] == 2 && |
|
(userAddressId == "")) { |
|
SmartDialog.showToast("请选择一个收货地址", alignment: Alignment.center); |
|
return; |
|
} |
|
BaseData? baseDate = await apiService?.creditOrder({ |
|
"goodsId": widget.arguments["goodsId"], |
|
"isOneSell": widget.arguments["payType"] != 3, |
|
|
|
///增加集换卡,该字段去掉改用payType |
|
// "isPoints": !handleNeedPay().contains("元"), |
|
"payType": (widget.arguments["payType"] == 1) |
|
? 2 |
|
: ((widget.arguments["payType"] == 2) ? 1 : 3), |
|
"number": 1, |
|
"useTyped": widget.arguments["useTyped"], |
|
"payChannel": |
|
handleNeedPay().contains("元") ? (checkIndex == 3 ? "1" : "4") : "0", |
|
if (widget.arguments["useTyped"] == 1) "storeId": storeId, |
|
if (widget.arguments["useTyped"] == 2) "userAddressId": userAddressId, |
|
}); |
|
if (baseDate?.isSuccess ?? false) { |
|
String realPay = handleNeedPay(); |
|
if ((widget.arguments["payType"] == 4 || |
|
(widget.arguments["payType"] == 3 && |
|
widget.arguments["money"] != "0.00")) && checkIndex == 3) { |
|
// if(Platform.isAndroid){ |
|
// if (!(await Min.isInitialize())) { |
|
// // 小程序的微信支付和app的充值支付使用同一个WXPayEntryActivity回调, |
|
// // 然而充值时小程序未初始化会导致回调内部代码调用getPackage空指针, |
|
// // 故而在此初始化一下 |
|
// await Min.initialize(); |
|
// } |
|
// } |
|
WxPay? wxPay = WxPay.fromJson(baseDate!.data); |
|
if (wxPay?.isAnyEmpty() ?? true) { |
|
return; |
|
} |
|
await fluwx.registerApi( |
|
appId: wxPay.appId!, |
|
doOnAndroid: true, |
|
universalLink: "https://hx.lotus-wallet.com/app/", |
|
); |
|
fluwx.pay( |
|
which: Payment( |
|
appId: wxPay.appId!, |
|
partnerId: wxPay.partnerId!, |
|
prepayId: wxPay.prepayId!, |
|
packageValue: wxPay.packageValue!, |
|
nonceStr: wxPay.nonceStr!, |
|
timestamp: int.tryParse(wxPay.timeStamp!) ?? 0, |
|
sign: wxPay.sign!, |
|
) |
|
); |
|
return; |
|
} |
|
await Navigator.of(context).pushNamed( |
|
'/router/exchange_order_success_page', |
|
arguments: { |
|
"price": realPay.contains(S.of(context).jifen) |
|
? realPay.substring(0, realPay.indexOf(S.of(context).jifen)) |
|
: "0", |
|
"happyBeanPrice": realPay.contains("印章") |
|
? realPay.substring(0, realPay.indexOf("印章")) |
|
: "0", |
|
"realPay": realPay, |
|
"points": points, |
|
"happyBean": happyBean, |
|
"payChannel": widget.arguments["payChannel"], |
|
"id": baseDate!.data |
|
}, |
|
); |
|
points = "${(int.tryParse("${points}") ?? 0) - (int.tryParse("${widget.arguments["price"]}") ?? 0)}"; |
|
happyBean = "${(int.tryParse("${happyBean}") ?? 0) - (int.tryParse("${widget.arguments["price"]}") ?? 0)}"; |
|
Navigator.of(context).pop(); |
|
} else { |
|
SmartDialog.showToast("${baseDate?.msg}", alignment: Alignment.center); |
|
} |
|
} |
|
}
|
|
|