123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- 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:fluwx/fluwx.dart' as fluwx;
- import 'package:tobias/tobias.dart' as tobias;
- import 'package:farmer_client/services/pay.dart';
- import 'package:farmer_client/services/orderAPI.dart';
- import 'package:farmer_client/utils/processStatus.dart';
- import 'package:farmer_client/widgets/DefaultButton.dart';
- import 'package:farmer_client/widgets/Bold.dart';
- import 'package:farmer_client/widgets/OrderInfoCard.dart';
- import 'package:farmer_client/widgets/layout/BasicPage.dart';
- import 'package:farmer_client/widgets/Modal.dart' as modal;
- import 'package:farmer_client/models/entities/OrderInfoModel.dart';
-
- import './widgets/PayItem.dart';
-
- class OrderPageInfo extends BasicPage {
- final id = Rx<String>('');
- final orderStateText = Rx<String>('待支付');
- final orderStateColor = Rx<Color>(Colors.black);
- final orderInfoContent = Rx<OrderInfoModel>(OrderInfoModel.fromJson(
- {'status': 6, 'dispatchStatus': 6, 'workStatus': 6}));
-
- final evalText = Rx<String>('');
- final evalStars = Rx<num>(-1);
-
-
- @override
- void beforeShow() {
-
- super.beforeShow();
- if (Get.arguments != null && Get.arguments['orderId'] != null) {
- id(Get.arguments['orderId']);
-
- orderInfo(Get.arguments['orderId']).then((value) {
- EasyLoading.show(status: '数据加载中...');
- OrderInfoModel orderInfo = OrderInfoModel.fromJson(value);
- ProcessSign processSign = getProcessSign(getProcessStatus(orderInfo));
- orderStateText(processSign.label);
- orderStateColor(processSign.color);
- orderInfoContent(orderInfo);
- EasyLoading.dismiss();
- });
- }
- }
-
- Widget _action(BuildContext context, String orderId) {
- bool mustAction = false;
- var btnLabel;
- var btnFunction;
-
- switch (getProcessStatus(orderInfoContent.value)) {
- case 1:
- case 2:
- mustAction = true;
- btnLabel = '取消';
- btnFunction = () {
- _cancelOrder(orderId);
- };
- break;
- case 4:
- mustAction = true;
- btnLabel = '支付';
- btnFunction = () {
- _bottomSheet(context);
- };
- break;
- case 5:
- mustAction = true;
- btnLabel = '评价';
- btnFunction = () {
- _fnEvaluate(orderId);
- };
- break;
- case 3:
- case 6:
- default:
- break;
- }
-
- if (mustAction) {
- return DefaultButton(
- color: const Color(0xffffffff),
- backColor: const Color(0xFFFF703B),
- width: 300.w,
- height: 49.h,
- text: btnLabel,
- margin: const EdgeInsets.all(0),
- fontSize: 20.sp,
- radius: 24.5.w,
- onPressed: btnFunction,
- );
- } else {
- return const Text('');
- }
- }
-
- @override
- Widget builder(BuildContext context) {
- naviTitle = '订单详情';
-
- return Column(
- children: [
- Obx(
- () => OrderInfoCard(
- item: orderInfoContent(),
- orderStateText: orderStateText(),
- orderStateColor: orderStateColor()),
- ),
- Obx(
- () => Container(
- padding: EdgeInsets.fromLTRB(15, 50.w, 15, 0),
- child: _action(context, id.value)),
- ),
- ],
- );
- }
-
-
- _cancelOrder(String orderId) {
- modal.showDialog(
- title: '提示',
- content: Container(
- alignment: Alignment.center,
- child: const Text('确定要取消此订单吗?'),
- ),
- onCancel: () => true,
- onConfirm: () => {
- orderDelete(orderId).then((value) {
- Fluttertoast.showToast(msg: '订单取消成功!');
- Get.offAllNamed('/order');
- })
- });
- }
-
-
- Widget _evaluateWidget(Function onEvaluate) {
- double star = -1;
- String desc = '';
-
- return 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)
-
- ))),
- child: Row(
- children: [
- Text(
- '满意度:',
- style: TextStyle(
- fontSize: 17.sp, fontWeight: FontWeight.bold),
- ),
- FFStars(
-
- normalStar: Image.asset('images/icons/starOff.png'),
- selectedStar: Image.asset('images/icons/starOn.png'),
- starsChanged: (realStars, selectedStars) {
- star = realStars;
- onEvaluate(star, desc);
- },
- 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: const 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) {
- desc = e;
- onEvaluate(star, desc);
- },
- ),
- )
- ],
- ),
- ));
- }
-
-
- _fnEvaluate(String orderId) {
- double evalStars = -1;
- String evalText = '';
-
- onEvaluate(double val1, String val2) {
- evalStars = val1;
- evalText = val2;
- }
-
- modal.showDialog(
- title: '评价此订单',
- content: _evaluateWidget(onEvaluate),
- onCancel: () => true,
- onConfirm: () {
- if (evalStars != -1 && evalText != '') {
- orderEvaluation(orderId, evalStars, evalText).then((value) {
- Fluttertoast.showToast(msg: '评价成功!');
- Get.offAllNamed('/order');
- });
- } else {
- Fluttertoast.showToast(msg: '请完整选择评分或输入评价内容');
- return false;
- }
- },
- );
- }
-
-
- Future<void> payMoney(String payType) async {
- if (payType == 'wxPay') {
- final isInstall = await fluwx.isWeChatInstalled;
- if (!isInstall) {
- EasyLoading.showError('请先安装微信');
- return;
- }
- createOrder(id.value, "wx").then((value) {
- 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) {
-
- Get.snackbar('提示', "支付成功");
- Get.offAllNamed('/order');
- } else {
- EasyLoading.showError('支付失败');
- }
-
- });
- return;
- } else if (payType == 'aliPay') {
- final isInstall = await tobias.isAliPayInstalled();
- if (!isInstall) {
- EasyLoading.showError('请先安装支付宝');
- return;
- }
-
- createOrder(id.value, "aliPay").then((value) {
- tobias.aliPay(value).then((payResult) {
- print("支付宝:" + payResult.toString());
-
- if (payResult['resultStatus'] == '9000') {
- Get.snackbar('提示', "支付成功");
- Get.offAllNamed('/order');
- } else {
- EasyLoading.showError('支付失败');
- }
- });
- });
- }
- }
-
-
- _bottomSheet(BuildContext context) {
-
- showModalBottomSheet(
- context: context,
- isScrollControlled: false,
- backgroundColor: Colors.white,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.all(Radius.circular(10))),
- builder: (BuildContext context) {
- return SizedBox(
- height: 200.w,
- child: Center(
- child: Column(
- children: [
- Padding(
- padding: EdgeInsets.fromLTRB(0, 25.w, 0, 34.w),
- child: Bold(text: "支付方式", fontSize: 17.sp),
- ),
- PayItem(
- label: "支付宝",
- icon: const AssetImage('images/alipay.png'),
- onPress: () {
- payMoney('aliPay');
- },
- ),
- PayItem(
- label: "微信",
- icon: const AssetImage('images/weChatPay.png'),
- onPress: () {
- payMoney('wxPay');
- },
- ),
- ],
- )),
- );
- });
- }
- }
|