import 'package:farmer_client/pages/orderInfo/widgets/star.dart'; import 'package:farmer_client/services/pay.dart'; import 'package:farmer_client/widgets/DefaultButton.dart'; import 'package:ff_stars/ff_stars.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart'; import 'package:farmer_client/widgets/Modal.dart' as modal; import 'package:fluwx/fluwx.dart' as fluwx; import '../../models/entities/OrderInfoModel.dart'; import '../../services/orderAPI.dart'; import '../../widgets/OrderInfoCard.dart'; import '../../widgets/layout/BasicPage.dart'; // class OrderContentInfo { // String title; // Color styleColor; // StyleObj ({ required this.title, required this.styleColor}); // } class OrderPageInfo extends BasicPage { final id = Rx(''); final orderStateText = Rx('待支付'); final orderStateColor = Rx(Colors.black); final orderInfoContent = Rx(OrderInfoModel()); final evalText = Rx(''); final evalStars = Rx(-1); // orderStates @override void beforeShow() { // TODO: implement beforeShow super.beforeShow(); if (Get.arguments['id'] != null) { id(Get.arguments['id']); print(Get.arguments); orderStateText(Get.arguments['title']); orderStateColor(Get.arguments['styleColor']); orderInfo(id()).then((value) { EasyLoading.show(status: '数据加载中...'); orderInfoContent(OrderInfoModel.fromJson(value)); EasyLoading.dismiss(); }); } } @override Widget builder(BuildContext context) { naviTitle = '订单详情'; return Column( children: [ Obx( () => OrderInfoCard( item: orderInfoContent(), orderStateText: orderStateText(), orderStateColor: orderStateColor()), ), // Obx(() => _BottomWidget(id: id())), Obx( () => Container( padding: EdgeInsets.fromLTRB(15, 50.w, 15, 0), child: _bottomJudgment(id.value)), ), ], ); } Widget _bottomJudgment(String id) { return orderStateText.value == '已完成' ? Text('') : orderStateText.value == '进行中' ? Text('') : orderStateText.value == '待评价' ? DefaultButton( color: const Color(0xffffffff), backColor: const Color(0xFFFF703B), width: 300.w, height: 49.h, text: '评价', onPressed: () { modal.showDialog( title: '评价此订单', content: Container( alignment: Alignment.center, child: Container( margin: const EdgeInsets.fromLTRB(15, 20, 15, 20), child: Column( children: [ Container( padding: const EdgeInsets.fromLTRB( 0, 0, 0, 10), decoration: const BoxDecoration( border: Border( bottom: BorderSide( width: 0.8, color: Color(0x20000000) // 0x17000000 ))), child: Row( children: [ Text( '满意度:', style: TextStyle( fontSize: 17.sp, fontWeight: FontWeight.bold), ), FFStars( //https://pub.dev/packages/ff_stars normalStar: Image.asset( 'images/icons/starOff.png'), selectedStar: Image.asset( 'images/icons/starOn.png'), starsChanged: (realStars, selectedStars) { evalStars(realStars); print( "real: $selectedStars, final: $realStars"); }, step: 1, defaultStars: 0, ), ], ), ), Container( margin: const EdgeInsets.fromLTRB( 0, 20, 0, 0), width: 300.w, height: 100.w, decoration: BoxDecoration( border: Border.all( color: Color(0x20000000), width: 0.8, ), ), child: TextField( minLines: 6, maxLines: 6, style: TextStyle( fontSize: 17.sp, height: 1.5), decoration: const InputDecoration( isCollapsed: true, border: InputBorder.none, counterText: '', hintText: '请输入评价内容', floatingLabelBehavior: FloatingLabelBehavior.never, ), onChanged: (e) { evalText(e); }, ), ) ], ), )), onCancel: () => true, onConfirm: () { if (evalStars.value != -1 && evalText.value != '') { orderEvaluation( id, evalStars.value, evalText.value) .then((value) { Fluttertoast.showToast(msg: '评价成功!'); Get.offNamed('/order'); }); } else { Fluttertoast.showToast(msg: '请完整选择评分或输入评价内容'); return false; } }); }, margin: const EdgeInsets.all(0), fontSize: 20.sp, radius: 24.5.w, ) : orderStateText.value == '待作业' ? DefaultButton( color: const Color(0xffffffff), backColor: const Color(0xFFFF703B), width: 300.w, height: 49.h, text: '退单', onPressed: () { modal.showDialog( title: '提示', content: Container( alignment: Alignment.center, child: Text('确定要申请退单吗?'), ), onCancel: () => true, onConfirm: () => { orderRefund(id).then((value) { Fluttertoast.showToast(msg: '退单成功!'); Get.offNamed('/order'); }), }); }, margin: const EdgeInsets.all(0), fontSize: 20.sp, radius: 24.5.w, ) : orderStateText.value == '已付款' ? DefaultButton( color: const Color(0xffffffff), backColor: const Color(0xFFFF703B), width: 300.w, height: 49.h, text: '退单', onPressed: () { modal.showDialog( title: '提示', content: Container( alignment: Alignment.center, child: Text('确定要申请退单吗?'), ), onCancel: () => true, onConfirm: () => { orderRefund(id).then((value) { Fluttertoast.showToast(msg: '退单成功!'); Get.offNamed('/order'); }), }); }, margin: const EdgeInsets.all(0), fontSize: 20.sp, radius: 24.5.w, ) : orderStateText.value == '待付款' ? _BottomWidget( id: id, ) : orderStateText.value == '已退单' ? Text('') : orderStateText.value == '退单申请中' ? Text(orderStateText.value) : Text(''); } } class _BottomWidget extends StatelessWidget { final id; final resultMessage = Rx('---'); _BottomWidget({Key? key, required this.id}) : super(key: key); void _orderDeletels() { modal.showDialog( title: '提示', content: Container( alignment: Alignment.center, child: Text('确定要取消此订单吗?'), ), onCancel: () => true, onConfirm: () => { orderDelete(id).then((value) { Fluttertoast.showToast(msg: '订单取消成功!'); Get.offNamed('/order'); }) }); } Future payMoney (String payType) async { if(payType=='wxPay'){ final isInstall=await fluwx.isWeChatInstalled; if(!isInstall){ EasyLoading.showError('未安装微信'); print('isInstall--------$isInstall'); return; } createOrder(id, "wx").then((value) { print('--------------微信支付-----------------'); print('result--------$value'); print('-------------------------------'); print("appid--------${value['appid']}"); print("partnerId--------${value['partnerId']}"); print("prepayId--------${value['prepayId']}"); print("packageValue--------${value['packageValue']}"); print("noncestr--------${value['noncestr']}"); print("timestamp--------${value['timestamp']}"); print("sign--------${value['sign']}"); fluwx.payWithWeChat( appId: value['appid'].toString(), partnerId: value['partnerId'].toString(), prepayId: value['prepayId'].toString(), packageValue: value['packageValue'].toString(), nonceStr: value['noncestr'].toString(), timeStamp: int.parse(value['timestamp'].toString()), sign: value['sign'].toString(), ).then((res) { print("payWithWeChat--------${res}"); }) .catchError((onError){ print("payWithWeChat错误--------${onError}"); }) ; }); // 监听支付结果 fluwx.weChatResponseEventHandler.listen((event) async { print(event.errCode); // 支付成功 if (event.errCode == 0) { EasyLoading.showSuccess('支付成功'); Get.offNamed('/order'); }else{ EasyLoading.showError('支付失败'); } // 关闭弹窗 }); return; }else if(payType=='aliPay'){ print('--------------支付宝支付-----------------'); } } //显示底部弹框的功能 void showBottomSheet(context) { //用于在底部打开弹框的效果 showModalBottomSheet( context: context, isScrollControlled: false, backgroundColor: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10))), builder: (BuildContext context) { return Container( height: 200.w, //对话框高度就是此高度 child: Center( child: Column( children: [ Padding( padding: EdgeInsets.fromLTRB(0, 25.w, 0, 34.w), child: Text( "支付方式", style: TextStyle(fontSize: 17.sp, fontWeight: FontWeight.bold), ), ), Padding( padding: EdgeInsets.fromLTRB(15.w, 0, 15.w, 0), child: ListTile( onTap: (){ payMoney('aliPay'); }, contentPadding: EdgeInsets.symmetric(horizontal: 0.0), // 这边使用了contentPadding leading: Image( image: AssetImage('images/alipay.png'), width: 30.w, height: 30.w, ), title: Transform( transform: Matrix4.translationValues(-15, 0.0, 0.0), child: Text("支付宝", style: TextStyle( fontSize: 18.sp, color: Color(0xff333333))), ), trailing: Image( image: AssetImage('images/userRight.png'), width: 10.w, height: 18.w, ), ), ), Padding( padding: EdgeInsets.fromLTRB(15.w, 0, 15.w, 0), child: ListTile( onTap: () { payMoney('wxPay'); }, contentPadding: EdgeInsets.symmetric(horizontal: 0.0), // 这边使用了contentPadding leading: Image( image: AssetImage('images/weChatPay.png'), width: 30.w, height: 30.w, ), title: Transform( transform: Matrix4.translationValues(-15, 0.0, 0.0), child: Text("微信", style: TextStyle( fontSize: 18.sp, color: Color(0xff333333))), ), trailing: Image( image: AssetImage('images/userRight.png'), width: 10.w, height: 18.w, ), ), ), ], )), ); }); } @override Widget build(BuildContext context) { return Container( alignment: Alignment.bottomCenter, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox( width: 150.w, height: 49.h, child: ElevatedButton( onPressed: () { _orderDeletels(); }, child: const Text( "取消", style: TextStyle( fontSize: 18, color: Color(0xFFFF703B), fontWeight: FontWeight.bold), ), style: ButtonStyle( side: MaterialStateProperty.all( BorderSide(width: 1, color: Color(0xFFFF703B))), //边框 elevation: MaterialStateProperty.all(0), backgroundColor: MaterialStateProperty.all(Colors.white), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(24.4))), ), ), ), ), SizedBox( child: DefaultButton( color: const Color(0xffffffff), backColor: const Color(0xFFFF703B), width: 150.w, height: 49.h, text: '支付', onPressed: () { showBottomSheet(context); // Fluttertoast.showToast(msg: '支付成功!'); // Get.offAllNamed('/'); }, margin: const EdgeInsets.all(0), fontSize: 20.sp, radius: 24.5.w, ), ), ], ), ); } }