import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/order_info.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/flutter_utils.dart'; import 'package:huixiang/view_widget/border_text.dart'; import 'package:huixiang/view_widget/custom_image.dart'; import 'package:huixiang/view_widget/icon_text.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/pay_input_view.dart'; import 'package:huixiang/view_widget/round_button.dart'; import 'package:huixiang/view_widget/separator.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class OrderDetailPage extends StatefulWidget { final arguments; OrderDetailPage({this.arguments}); @override State createState() { return _OrderDetailPage(); } } class _OrderDetailPage extends State { ApiService apiService; @override void initState() { super.initState(); SharedPreferences.getInstance().then((value) { apiService = ApiService(Dio(), context: context, token: value.getString("token")); queryDetails(); }); } OrderInfo orderInfo; int payStatus = 0; int orderStatus = 0; int sendStatus = 0; int isTakeOut = 0; int refundStatus = 0; // String storeType = "NORMALSTORE"; //NORMALSTORE FASTSTORE RETAILSTORE queryDetails() async { BaseData baseData = await apiService.orderDetail(widget.arguments["id"]); if (baseData != null && baseData.isSuccess) { orderInfo = OrderInfo.fromJson(baseData.data); payStatus = orderInfo.payStatus; orderStatus = orderInfo.orderStatus; sendStatus = orderInfo.sendStatus; isTakeOut = orderInfo.isTakeOut; refundStatus = orderInfo.refundStatus; // storeType = orderInfo.storeVO.posType.code; print("refund_status: $refundStatus"); print("payStatus: $payStatus"); print("orderStatus: $orderStatus"); print("sendStatus: $sendStatus"); print("isTakeOut: $isTakeOut"); if (mounted) setState(() { statusTitle(); }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: MyAppBar( title: title ?? S.of(context).jinxingzhongdedingdan, titleColor: Colors.white, background: Color(0xFF3A405A), leadingColor: Colors.white, toolbarHeight: (orderStatus >= 4 ? 98 : 108) + MediaQuery.of(context).padding.top + kToolbarHeight, bottom: PreferredSize( preferredSize: Size(double.infinity, orderStatus >= 4 ? 98 : 108), child: Container( height: orderStatus >= 4 ? 98 : 108, padding: EdgeInsets.fromLTRB(16.w, 0, 16.w, 10.h), child: Column( children: [ Visibility( visible: center != null && center != "", child: Container( child: IconText( (center != null && center != "") ? center : "", leftImage: "assets/image/icon_order_ok.png", iconSize: 40.w, textStyle: TextStyle( fontSize: 24.sp, fontWeight: FontWeight.bold, color: Colors.white, ), ), ), ), Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ RoundButton( text: isTakeOut == 0 ? S.of(context).ziqu : isTakeOut == 1 ? S.of(context).waimai : S.of(context).kuaidi, width: 42.w, height: 20.h, textColor: Colors.white, fontSize: 12.sp, padding: EdgeInsets.fromLTRB(8.w, 1.h, 8.w, 1.h), backgroup: Color(0xFF32A060), radius: 15.w, ), Text( title, style: TextStyle( color: Colors.white, fontSize: 12.sp, ), ), ], ), flex: 1, ), Visibility( child: Container( height: 33.h, child: Row( mainAxisSize: MainAxisSize.min, children: timeWidget(), ), ), visible: (orderStatus >= 4 || isTakeOut == 2) ? false : (isTakeOut == 0) ? !(payStatus == 1) : (isTakeOut == 1) ? !(payStatus == 1 && (sendStatus != 2 && sendStatus != 3)) : !(payStatus == 1 && (sendStatus != 1)), ) ], ), flex: 1, ) ], )), ), ), body: Container( color: Color(0xFF3A405A), child: /*Column( children: [ Expanded( child:*/ Stack( children: [ Positioned( top: 0, left: 0, right: 0, child: Container( height: 36, color: Color(0xFF3A405A), ), ), SingleChildScrollView( physics: BouncingScrollPhysics(), child: Container( color: Color(0xFF3A405A), child: Column( children: [ buildAddress(), buildCommodity(), // if (payStatus == 0) couponRemarks(), /*(payStatus == 0) ? paySelector() : */ buildOrderInfo(), Container( height: 42.h, ), ], ), ), ), ], ), // flex: 1, // ), // if (payStatus == 0) // bottomPay(), // ], // ), ), ); } List timeWidget() { if (orderInfo == null) return []; String hour = ""; String minute = ""; if (payStatus == 0) { String hourMinute = AppUtils.getHourMinuteAfter30mByString( (orderInfo != null) ? orderInfo.createTime : ""); var hourMinutes = hourMinute.split(":"); hour = hourMinutes[0]; minute = hourMinutes[1]; } else { if (isTakeOut == 0) { } else if (isTakeOut == 1) { if (sendStatus == 2 || sendStatus == 3) { String hourMinute = AppUtils.getHourMinuteByString( (orderInfo != null && orderInfo.orderDetail != null) ? orderInfo.orderDetail.predictTime : ""); var hourMinutes = hourMinute.split(":"); hour = hourMinutes[0]; minute = hourMinutes[1]; } } else if (isTakeOut == 2) { // if (sendStatus == 1) { // String hourMinute = AppUtils.getHourMinuteByString( // (orderInfo != null && orderInfo.orderDetail != null) // ? orderInfo.orderDetail.predictTime // : ""); // var hourMinutes = hourMinute.split(":"); // hour = hourMinutes[0]; // minute = hourMinutes[1]; // } } } return [ AspectRatio( aspectRatio: 1, child: BorderText( text: hour, textColor: Colors.white, fontSize: 21.sp, fontWeight: FontWeight.bold, borderColor: Colors.white, borderWidth: 1, padding: EdgeInsets.all(2), ), ), SizedBox( width: 8.w, ), Text( ":", style: TextStyle( color: Colors.white, fontSize: 21.sp, ), ), SizedBox( width: 8.w, ), AspectRatio( aspectRatio: 1, child: BorderText( text: minute, textColor: Colors.white, fontSize: 21.sp, fontWeight: FontWeight.bold, borderColor: Colors.white, borderWidth: 1, padding: EdgeInsets.all(2), ), ), ]; } String title = ""; String center = ""; statusTitle() { if (isTakeOut == 0) { if (payStatus == 0) { title = S.of(context).dingdandaizhifu; } else { title = S.of(context).dingdanyizhifu; switch (orderStatus) { case 2: title = S.of(context).shangjiazhengzaipeican; break; case 3: title = S.of(context).dengdaiyonghuqucan; center = S.of(context).qudanhao(orderInfo.dayFlowCode); break; case 4: title = S.of(context).dingdanyiwancheng; center = S.of(context).dingdanyiwancheng; break; case 5: title = S.of(context).yiquxiao; center = S.of(context).yiquxiao; break; } } } else if (isTakeOut == 1) { if (payStatus == 0) { title = S.of(context).dingdandaizhifu; } else { title = S.of(context).dengdaishangjiaqueren; if (orderStatus < 4) { switch (sendStatus) { case 1: title = S.of(context).zhengzaihujiaoqishou; break; case 2: title = S.of(context).qishouyijiedanquhuozhong; break; case 3: title = S.of(context).qishoupeisongzhongyujisongdashijian; break; case 4: title = S.of(context).dingdanyisongda; center = S.of(context).dingdanyisongda; switch (orderStatus) { case 4: title = S.of(context).dingdanyiwancheng; center = S.of(context).dingdanyiwancheng; break; } break; } } else if (orderStatus == 4) { title = S.of(context).dingdanyiwancheng; center = S.of(context).dingdanyiwancheng; } } } else if (isTakeOut == 2) { if (payStatus == 0) { title = S.of(context).dingdandaizhifu; } else { title = S.of(context).dingdandaifahuo; if (orderStatus < 4) { switch (sendStatus) { case 1: title = S.of(context).shangjiayifahuo; break; case 4: title = S.of(context).huopinyisongda; center = S.of(context).huopinyisongda; break; } } else if (orderStatus == 4) { title = S.of(context).dingdanyiwancheng; center = S.of(context).dingdanyiwancheng; } } } if (orderStatus == 5) { title = S.of(context).yiquxiao; center = S.of(context).yiquxiao; } if (refundStatus == 1) { title = S.of(context).dingdanyituikuan; center = S.of(context).dingdanyituikuan; } } Widget couponRemarks() { return Container( margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 8.h, bottom: 2.h), 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( crossAxisAlignment: CrossAxisAlignment.start, children: [ orderInfoItem(S.of(context).youhuiquan, "暂无可用优惠券"), orderInfoItem(S.of(context).beizhu, "口味、面包硬度等"), ], ), ); } Widget bottomPay() { return Container( height: 54.h, color: Colors.white, child: Row( children: [ Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic, children: [ Text( S.of(context).heji, style: TextStyle( fontSize: 12.sp, color: Colors.black, ), ), Text( S .of(context) .yuan_(orderInfo != null ? orderInfo.finalPayPrice : "0"), style: TextStyle( fontSize: 20.sp, color: Color(0xFF32A060), fontWeight: FontWeight.bold, ), ), ], ), flex: 1, ), SizedBox( width: 16.w, ), InkWell( onTap: () {}, child: Container( alignment: Alignment.center, color: Color(0xFF32A060), padding: EdgeInsets.symmetric(horizontal: 36.w), child: Text( S.of(context).jiesuan, style: TextStyle( fontSize: 16.sp, color: Colors.white, ), ), ), ), ], ), ); } carryOnPay() async { showDialog( context: context, builder: (context) { return AlertDialog( content: Container( width: MediaQuery.of(context).size.width - 84.w, height: 120.h, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( "app暂不支持支付,\n请前往对应小程序处理", textAlign: TextAlign.center, style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.bold, color: Colors.black, ), ), SizedBox( height: 30.h, ), Row( children: [ Expanded( child: InkWell( child: BorderText( text: "取消", textColor: Color(0xFF32A060), fontSize: 16.sp, fontWeight: FontWeight.bold, borderColor: Color(0xFF32A060), radius: 4, padding: EdgeInsets.all(12), borderWidth: 1, ), onTap: () { Navigator.of(context).pop(); }, ), flex: 1, ), SizedBox( width: 16.w, ), Expanded( child: InkWell( child: RoundButton( text: "好的", textColor: Colors.white, radius: 4, padding: EdgeInsets.all(12), backgroup: Color(0xFF32A060), fontSize: 16.sp, fontWeight: FontWeight.bold, ), onTap: () { Navigator.of(context).pop(); }, ), flex: 1, ), ], ) ], ), ), ); }); } Widget paySelector() { return Container( margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 14.h, bottom: 2.h), 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( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( S.of(context).zhifufangshi, style: TextStyle( color: Color(0xFF727272), fontSize: 12.sp, fontWeight: FontWeight.bold, ), ), SizedBox( height: 20.h, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ checkView(0), // Image.asset("assets/image/icon_alipay.png"), Text( S.of(context).yue, style: TextStyle( fontSize: 12.sp, color: Color(0xff353535), ), ), ], ), SizedBox( height: 20.h, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ checkView(1), IconText( S.of(context).weixinzhifu, leftImage: "assets/image/icon_we_chat.png", iconSize: 14.w, space: 8.w, textStyle: TextStyle( fontSize: 12.sp, color: Color(0xFF353535), ), ), ], ) ], ), ); } var checkIndex = 0; Widget checkView(var index) { return GestureDetector( onTap: () { setState(() { checkIndex = index; }); }, child: Container( padding: EdgeInsets.only(right: 16), alignment: Alignment.center, child: Image.asset( checkIndex != index ? "assets/image/icon_radio_unselected.png" : "assets/image/icon_radio_selected.png", width: 15, height: 15, )), ); } Widget buildAddress() { return Container( margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 20.h, bottom: 2.h), 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( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Image.asset( "assets/image/icon_location_address.png", width: 28.w, height: 28.h, ), Text( (orderInfo != null && orderInfo.addressExt != null) ? (orderInfo.addressExt.recName ?? "") : "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, color: Color(0xFF4C4C4C), ), ), SizedBox( width: 12.w, ), Expanded( child: Text( (orderInfo != null && orderInfo.addressExt != null) ? (orderInfo.addressExt.recMobile ?? "") : "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, color: Color(0xFF4C4C4C), ), ), ), Icon( Icons.keyboard_arrow_right, size: 16, color: Colors.black, ), ], ), Container( margin: EdgeInsets.only(left: 28.w), child: Text( (orderInfo != null && orderInfo.addressExt != null) ? (orderInfo.addressExt.address ?? "") : "", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 10.sp, color: Color(0xFFA29E9E), ), ), ), Visibility( visible: orderStatus < 5 && refundStatus == 0, child: Container( margin: EdgeInsets.only(top: 20.h, bottom: 16.h), child: MySeparator( width: 5.w, height: 1.h, color: Color(0xFFA29E9E), ), ), ), Visibility( visible: orderStatus < 5 && refundStatus == 0, child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.center, children: [ InkWell( onTap: () { showModalBottomSheet( context: context, builder: (context) { return PayInputWidget(); }, ); }, child: Column( children: [ Image.asset( payStatus == 0 ? "assets/image/icon_order_cancel.png" : "assets/image/icon_request_refund.png", width: 24.w, height: 24.h, fit: BoxFit.contain, ), SizedBox( height: 8.h, ), Text( payStatus == 0 ? S.of(context).quxiaodingdan : S.of(context).shenqingtuikuan, style: TextStyle( color: Color(0xFF353535), fontSize: 12.sp, ), ), ], ), ), GestureDetector( onTap: () { if (payStatus == 0) { carryOnPay(); } else {} }, child: Column( children: [ Image.asset( payStatus == 0 ? "assets/image/icon_order_renminbi.png" : "assets/image/icon_order_agin.png", width: 24.w, height: 24.h, fit: BoxFit.contain, ), SizedBox( height: 8.h, ), Text( payStatus == 0 ? S.of(context).jixuzhifu : S.of(context).zailaiyidan, style: TextStyle( color: Color(0xFF32A060), fontSize: 12.sp, ), ), ], ), ), ], ), ), ], ), ); } Widget buildCommodity() { return Stack( alignment: Alignment.centerRight, children: [ Container( margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 16.h, bottom: 8.h), padding: EdgeInsets.only(left: 20.w, right: 20.w, top: 12.h, bottom: 12.h), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 1), blurRadius: 12, spreadRadius: 0, ) ], borderRadius: BorderRadius.all(Radius.circular(8)), ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: commodityList(), ), ), Visibility( child: buildQrCode(), visible: false, ), ], ); } List commodityList() { if (orderInfo == null) return []; List widgets = []; if (orderInfo.productList != null) { widgets .addAll(orderInfo.productList.map((e) => commodityItem(e)).toList()); } widgets.add(SizedBox(height: 20.h)); if (orderInfo.isTakeOut != 0) { // 配送费 widgets.add(discountItem( Color(0xFFFF7A1A), orderInfo.isTakeOut == 1 ? S.of(context).peisongfei : S.of(context).yunfei, "", "+${orderInfo.postFee}")); } if (orderInfo.orderDetail != null && orderInfo.orderDetail.couponDTO != null) { // 配送费 widgets.add(discountItem( Color(0xFF32A060), "优惠券", orderInfo.orderDetail.couponDTO.name, orderInfo.orderDetail.couponDTO.money)); } if (orderInfo.storeVO != null && orderInfo.storeVO.couponVO != null) { // widgets.add(discountItem(Color(0xFF32A060), // orderInfo.storeVO.couponVO.storeName, // S.of(context).huodongjianmianpeisongfei(orderInfo.storeVO.couponVO.discountAmount), // orderInfo.storeVO.couponVO.f)); // Color(0xFFFF7A1A) } widgets.add(Container( margin: EdgeInsets.only( top: 24.h, bottom: 4.h, ), child: MySeparator( height: 1, width: 5.w, color: Colors.grey, ), )); widgets.add(buildTotalPrice()); return widgets; } Widget buildQrCode() { return Container( margin: EdgeInsets.only(right: 16.w), child: Stack( children: [ Container( width: 94.w, height: 33.h, margin: EdgeInsets.only(left: 12.w), padding: EdgeInsets.only(left: 16.w), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(25), offset: Offset(0, 1), blurRadius: 12, spreadRadius: 0, ) ], borderRadius: BorderRadius.only( topLeft: Radius.circular(2), bottomLeft: Radius.circular(2), ), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( S.of(context).qujianma, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 12.sp, color: Colors.black), ), Icon( Icons.keyboard_arrow_right, color: Colors.black, size: 16, ) ], ), ), Container( margin: EdgeInsets.only(top: 6.h, bottom: 6.h), // padding: EdgeInsets.all(2), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(25), offset: Offset(0, 1), blurRadius: 12, spreadRadius: 0, ) ], borderRadius: BorderRadius.all(Radius.circular(2))), child: Icon( Icons.qr_code, size: 20, color: Color(0xFF32A060), )), ], ), ); } Widget buildOrderInfo() { return Container( margin: EdgeInsets.only(left: 16.w, right: 16.w, top: 8.h, bottom: 8.h), padding: EdgeInsets.only(left: 20.w, right: 20.w, top: 12.h, bottom: 12.h), decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.black.withAlpha(12), offset: Offset(0, 1), blurRadius: 12, spreadRadius: 0, ) ], borderRadius: BorderRadius.all(Radius.circular(8)), ), child: Column( children: [ orderInfoItem( S.of(context).dingdanhao, orderInfo != null ? orderInfo.id : ""), orderInfoItem(S.of(context).xiadanshijian, orderInfo != null ? orderInfo.createTime : ""), // orderInfoItem(S.of(context).peisongfangshi, orderInfo != null ? orderInfo.createTime : ""), orderInfoItem( S.of(context).beizhu, orderInfo != null ? orderInfo.notes ?? S.of(context).qingshurubeizhuyaoqiu : S.of(context).qingshurubeizhuyaoqiu), orderInfoItem(S.of(context).zhifufangshi, orderInfo != null ? payChannel() : S.of(context).yue), ], ), ); } String payChannel() { switch (orderInfo.payChannel) { case 0: return "现金支付"; case 1: return "微信支付"; case 2: return "支付宝支付"; case 3: return "商户会员余额支付"; case 4: return "平台会员余额支付"; case 5: return "美团买单"; case 6: return "饿了么支付"; case 7: return "扫呗支付"; case 8: return "微生活"; case 9: return "银联支付"; } return S.of(context).yue; } Widget orderInfoItem(leftText, rightText) { return Container( margin: EdgeInsets.only(top: 8.h, bottom: 8.h), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( leftText, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 12.sp, color: Color(0xFF727272), ), ), Expanded( child: Text( rightText, textAlign: TextAlign.end, style: TextStyle( fontSize: 12.sp, color: Color(0xFF353535), ), ), flex: 1, ), SizedBox( width: 16.w, ), Icon( Icons.keyboard_arrow_right, size: 16, color: Colors.black, ) ], ), ); } Widget commodityItem(ProductList productList) { return Container( margin: EdgeInsets.only(top: 8.h, bottom: 8.h), child: Row( children: [ MImage( productList.skuImg, width: 44.w, height: 44.w, fit: BoxFit.cover, errorSrc: "assets/image/default_1.png", fadeSrc: "assets/image/default_1.png", ), Expanded( flex: 1, child: Container( margin: EdgeInsets.only(left: 16.w, right: 16.w), height: 44.h, child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( productList.productName, style: TextStyle( fontWeight: FontWeight.bold, fontSize: 14.sp, color: Color(0xFF353535), ), ), Text( "x${productList.buyNum}", style: TextStyle( fontSize: 12.sp, color: Color(0xFF727272), ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded( flex: 1, child: Text( "${productList.weight}kg", overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 12.sp, color: Color(0xFFA29E9E), ), ), ), Text( S.of(context).yuan_(productList.sellPrice), style: TextStyle( fontWeight: FontWeight.bold, fontSize: 12.sp, color: Color(0xFF4C4C4C), ), ) ], ), ], ), ), ), ], ), ); } Widget discountItem(Color color, textName, condition, amount) { return Container( margin: EdgeInsets.only(top: 9.h, bottom: 9.h), child: Row( children: [ Container( padding: EdgeInsets.fromLTRB(4.w, 2.h, 4.w, 2.h), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(2)), border: Border.all( width: 1, color: color, style: BorderStyle.solid, ), ), child: Text( textName, style: TextStyle( fontSize: 10.sp, color: color, ), ), ), SizedBox( width: 27.w, ), Expanded( child: Text( condition, style: TextStyle( fontSize: 10.sp, color: Color(0xFFA29E9E), ), ), flex: 1, ), Text( S.of(context).yuan_("$amount"), style: TextStyle( fontSize: 12.sp, color: color, ), ), ], ), ); } Widget buildTotalPrice() { return Container( margin: EdgeInsets.only(top: 7.h, bottom: 11.h), child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic, children: [ Expanded( child: Text( S.of(context).gongjijianshangpin( (orderInfo != null && orderInfo.productList != null) ? orderInfo.productList.length : "0"), style: TextStyle( fontSize: 10.sp, color: Color(0xFFA29E9E), ), ), flex: 1, ), Container( child: Text( S.of(context).jiesuanjine, style: TextStyle( fontSize: 10.sp, color: Color(0xFF353535), ), ), ), SizedBox( width: 5.w, ), Text( totalPrice(), textAlign: TextAlign.end, style: TextStyle( fontSize: 30.sp, color: Color(0xFF32A060), ), ) ], ), ); } String totalPrice() { if (orderInfo == null) return ""; double totalPrice = (double.tryParse(orderInfo.orderSum) + double.tryParse(orderInfo.postFee)); if (orderInfo.orderDetail != null && orderInfo.orderDetail.couponDTO != null) { totalPrice -= double.tryParse(orderInfo.orderDetail.couponDTO.money); } return "$totalPrice"; } }