import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:liftmanager/common/common.dart'; import 'package:liftmanager/internal/account/account_router.dart'; import 'package:liftmanager/internal/account/model/user_info_entity.dart'; import 'package:liftmanager/internal/account/provider/user_provider.dart'; import 'package:liftmanager/internal/wode/wode_router.dart'; import 'package:liftmanager/net/api_service.dart'; import 'package:liftmanager/routers/fluro_navigator.dart'; import 'package:liftmanager/utils/image_utils.dart'; import 'package:liftmanager/widgets/app_bar.dart'; import 'package:liftmanager/widgets/click_item.dart'; import 'package:liftmanager/widgets/load_image.dart'; import 'package:liftmanager/widgets/my_button.dart'; import 'package:provider/provider.dart'; import 'package:liftmanager/widgets/bbs_content.dart'; import 'package:liftmanager/internal/bbs/bbs_router.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:liftmanager/internal/bbs/model/liftcase_model.dart'; import 'package:liftmanager/utils/toast.dart'; import 'package:liftmanager/utils/time_format.dart'; import 'package:liftmanager/utils/url.dart'; import 'package:liftmanager/internal/wode/order_const.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:video_player/video_player.dart'; import 'package:chewie/chewie.dart'; import 'package:liftmanager/utils/utils.dart'; import 'package:liftmanager/utils/theme_utils.dart'; import 'package:flutter/services.dart'; import 'package:orientation/orientation.dart'; class OrderDetail extends StatefulWidget { OrderDetail(this.id); final String id; @override State createState() { return OrderDetailState(); } } class OrderDetailState extends State with AutomaticKeepAliveClientMixin { UserProvider provider = UserProvider(); bool _hasData = false; LiftCasesDetailModel detailObj; double totalPay; getBrandDetail() { if(_controllerBefore != null){ _controllerBefore.pause(); _controllerBefore = null; } if(_controllerAfter != null){ _controllerAfter.pause(); _controllerAfter = null; } NewApiService().getLiftcaseDetail(widget.id, onSuccess: (res) { detailObj = res; double serviceCost = detailObj.serviceCost!=null?detailObj.serviceCost:0.0; double travelCost = detailObj.travelCost!=null?detailObj.travelCost:0.0; double couponDeduction = detailObj.couponDeduction!=null?detailObj.couponDeduction:0.0; double redEnvelopeDeduction = detailObj.redEnvelopeDeduction!=null?detailObj.redEnvelopeDeduction:0.0; totalPay = (serviceCost + travelCost) - ( couponDeduction + redEnvelopeDeduction); print(serviceCost); print(travelCost); print(couponDeduction); print(redEnvelopeDeduction); print(totalPay); print("456456456465"); if(totalPay < 0){ totalPay = 0.0; } if(detailObj.beforeRepair!=null){ _controllerBefore = VideoPlayerController.network( Utils.getImagePath(detailObj.beforeRepair) ); } if(detailObj.afterRepair!=null){ _controllerAfter = VideoPlayerController.network( Utils.getImagePath(detailObj.afterRepair) ); } print(totalPay); print("totalPay-------------------------"); _hasData = true; setState(() {}); }, onError: (code, msg) { toasts(msg); }); } getPayCost(){ bool isPay = true; if((detailObj.dataTable == 1 && detailObj.statuz == 0) || (detailObj.dataTable == 2 && detailObj.statuz == 2)){ isPay = false; } return isPay; } List btnWidget = []; VideoPlayerController _controllerBefore; VideoPlayerController _controllerAfter; @override void initState() { if(this.mounted){ getBrandDetail(); } super.initState(); } @override void dispose() { if(detailObj.beforeRepair!=null){ _controllerBefore.pause(); _controllerBefore.dispose(); } if(detailObj.afterRepair!=null){ _controllerAfter.pause(); _controllerAfter.dispose(); } // SystemChrome.setPreferredOrientations([ // DeviceOrientation.portraitUp, // ]); OrientationPlugin.forceOrientation(DeviceOrientation.portraitUp); // provider.dispose(); super.dispose(); } // 用户确认订单 void confirmOrder() { showLoading(context); NewApiService().userConfirmOrder(widget.id, onSuccess: (res) { dismissLoading(context); toasts("订单确认成功"); getBrandDetail(); setState(() {}); }, onError: (code, msg) { dismissLoading(context); toasts(msg); }); } // 用户确认打卡 void confirmPunchin() { showLoading(context); NewApiService().userToClock(widget.id, onSuccess: (res) { dismissLoading(context); toasts("确认打卡成功"); getBrandDetail(); setState(() {}); }, onError: (code, msg) { dismissLoading(context); toasts(msg); }); } // 付款 void payment() { showLoading(context); NewApiService().getTestAlipayNotify(detailObj.orderNo, onSuccess: (res) { dismissLoading(context); toasts("付款成功"); getBrandDetail(); setState(() {}); }, onError: (code, msg) { dismissLoading(context); toasts(msg); }); } getHeight(detailObj){ bool isHeight = false; if((OrderConstant.isShow(detailObj.statuz,detailObj.dataTable,'showUserPaymentButton') && detailObj.chargerId!=null)|| (OrderConstant.isShow(detailObj.statuz,detailObj.dataTable,'showUserConfirmPunchButton',arrivedFlag: detailObj.arrivedFlag))|| (OrderConstant.isShow(detailObj.statuz,detailObj.dataTable,'showUserAppealButton'))|| (OrderConstant.isShow(detailObj.statuz,detailObj.dataTable,'showUserConfirmOrderButton'))|| (OrderConstant.isShow(detailObj.statuz,detailObj.dataTable,'showUserEvaluationButton'))|| (OrderConstant.isShow(detailObj.statuz,detailObj.dataTable,'showUserChooseExpertButton') || (detailObj.chargerId==null && detailObj.isPlatformSpecified == 0)) ){ isHeight = true; } return isHeight; } @override Widget build(BuildContext context) { double width = MediaQuery.of(context).size.width; double height = MediaQuery.of(context).size.height; if(width > height){ // SystemChrome.setPreferredOrientations([ // DeviceOrientation.portraitUp, // ]); OrientationPlugin.forceOrientation(DeviceOrientation.portraitUp); } return // Center(child:new Text("个人中心")); ChangeNotifierProvider( create: (_) => provider, child: Scaffold( appBar: MyAppBar( centerTitle: "订单详情", ), body: _hasData ? Consumer( builder: (_, provider, __) { return Stack( children: [ ListView( padding: EdgeInsets.all(0.0), children: [ Container( decoration: BoxDecoration( gradient: const LinearGradient( colors: [Color(0xFF00D9FF), Color(0xFF0287FF)], ), ), padding: EdgeInsets.only( top: ScreenUtil().setWidth(10), left: ScreenUtil().setWidth(30)), height: ScreenUtil().setWidth(70), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( OrderConstant.getStatusName( detailObj.statuz, detailObj.dataTable, arrivedFlag: detailObj.arrivedFlag, userType: 'USER'), textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(17), color: Color(0xffffffff), ), ), // detailObj.statuz == 6 // ? Text( // '还剩23小时59分钟自动确认', // textAlign: TextAlign.left, // style: TextStyle( // fontSize: ScreenUtil().setSp(13), // color: Color(0xffeeeeee), // ), // ) // : Container( // child: null, // ), ], ), ), Container( // height: 20, padding: EdgeInsets.only( bottom: ScreenUtil().setWidth(20), top: ScreenUtil().setWidth(10)), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: GestureDetector( onTap: () { NavigatorUtils.push(context, "${BbsRouter.recommendAsk}?id=${detailObj.id}&type=3"); }, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( margin: EdgeInsets.only( left: ScreenUtil().setWidth(15), right: ScreenUtil().setWidth(10), top: ScreenUtil().setWidth(5)), decoration: BoxDecoration( borderRadius: BorderRadius.circular( ScreenUtil().setWidth(22)), ), child: LoadNetworkImage( detailObj.avatarUrl, width: ScreenUtil().setWidth(43), height: ScreenUtil().setWidth(43), // alignment: Alignment.centerLeft, ), ), Expanded( child: Container( padding: EdgeInsets.only( right: ScreenUtil().setWidth(15)), child: Column( children: [ Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment .center, children: [ Text( detailObj.name ?? '', style: TextStyle( fontSize: ScreenUtil() .setSp( 17), ), textAlign: TextAlign.start, ), Container( padding: EdgeInsets.only( left: 5), child: Text( detailObj.dataTable == 1 ? '问诊服务' : '出诊服务', style: TextStyle( color: Color( 0xff0288FF), fontSize: ScreenUtil() .setSp( 13), ), textAlign: TextAlign .start, ), ), ], ), ], ), ), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment .center, children: [ Text( detailObj.createTime != null ? DateUtils .instance .getFormartData( timeSamp: detailObj .createTime, format: "MM月dd日", ) : '', style: TextStyle( color: Color( 0xff999999), fontSize: ScreenUtil() .setSp( 13), ), textAlign: TextAlign.left, ), Container( padding: EdgeInsets.only( left: 5), child: Text( detailObj .brandName ?? '', style: TextStyle( color: Color( 0xff999999), fontSize: ScreenUtil() .setSp( 13), ), textAlign: TextAlign .left, ), ) ], ), ], ), ), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Container( width: 260, child: Text( detailObj.expression ?? '', style: TextStyle( color: Color(0xff0288FF), fontSize: ScreenUtil() .setSp(15), ), textAlign: TextAlign.left, maxLines: 1, overflow: TextOverflow .ellipsis, ), ), ], ), ], ), ), ) ], ), ), ), ], ), ), Container( color: ThemeUtils.getDialogTextFieldColor(context), height: ScreenUtil().setWidth(5), ), detailObj.dataTable == 2 ? Heng( left: "差旅费", right: detailObj.travelCost != null ? "¥" + detailObj.travelCost.toString() : '¥0', leftColor: 0xff666666, rightColor: 0xff666666, ) : Container(), Heng( left: "技术服务费", right: detailObj.serviceCost != null ? "¥" + detailObj.serviceCost.toString() : '¥0', leftColor: 0xff666666, rightColor: 0xff666666, ), Heng( left: "优惠券抵扣", right: detailObj.couponDeduction != null ? "-¥" + detailObj.couponDeduction.toString() : '-¥0', leftColor: 0xff666666, rightColor: 0xff666666, ), Heng( left: "红包抵扣", right: detailObj.redEnvelopeDeduction != null ? "-¥" + detailObj.redEnvelopeDeduction.toString() : '-¥0', leftColor: 0xff666666, rightColor: 0xff666666, ), Heng( left: "实付款", right: detailObj.payCost != null && getPayCost() ? "¥" + detailObj.payCost.toString() : '¥' + totalPay.toStringAsFixed(2).toString(), leftColor: 0xff666666, rightColor: 0xffFD0808, ), Container( color: ThemeUtils.getDialogTextFieldColor(context), height: ScreenUtil().setWidth(5), ), Container( padding: EdgeInsets.only( left: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(10), bottom: ScreenUtil().setWidth(10), ), decoration: BoxDecoration( border: Border( bottom: BorderSide( width: .5, color: Color(0xffFAF7FA), ), ), ), child: Text( '订单信息', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(17), ), ), ), Container( padding: EdgeInsets.only( left: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(10), bottom: ScreenUtil().setWidth(10)), child: Column( children: [ Row( children: [ Text( '订单编号:', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(13), color: Color(0xff666666), ), ), Text( detailObj.orderNo ?? '', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(13), color: Color(0xff666666), ), ), ], ), Row( children: [ Text( '创建时间:', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(13), color: Color(0xff666666), ), ), Text( detailObj.createTime != null ? DateUtils.instance.getFormartData( timeSamp: detailObj.createTime, format: "yyyy-MM-dd HH:mm:ss") : '', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(13), color: Color(0xff666666), ), ), ], ), detailObj.liftCaseAppealEntity!=null? Row( children: [ Text( '驳回原因:', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(13), color: Color(0xff666666), ), ), Container( width: width*0.75, child: Text( detailObj.liftCaseAppealEntity?.cancelSeason??"", textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(13), color: Color(0xff666666), ), ), ) ], ):Container(child: null,), ], ), ), detailObj.dataTable==2? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: width, padding: EdgeInsets.only(left:ScreenUtil().setWidth(15),top:ScreenUtil().setWidth(10),bottom:ScreenUtil().setWidth(10)), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: .5, color:Color(0xfff5f5f5)), ), ), child: Text( '现场情况(维修前)', textAlign: TextAlign.left, style: TextStyle( fontSize:ScreenUtil().setSp(17), color:Color(0xff333333), ), ), ), detailObj.beforeRepair!=null?Container( padding: EdgeInsets.only( left: ScreenUtil().setWidth(15), right: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(15)), child: ClipRRect( borderRadius: BorderRadius.circular(5), child: new Chewie( controller: ChewieController( videoPlayerController: // VideoPlayerController.network( // Utils.getImagePath(detailObj.beforeRepair) // // imgFontUrl + detailObj.url // ) _controllerBefore, aspectRatio: 3 / 2, autoPlay: false, looping: true, showControls: true, deviceOrientationsAfterFullScreen:[DeviceOrientation.portraitUp,], // 占位图 // placeholder: Image.network( // imgFontUrl+detailObj.cover, // fit: BoxFit.contain, // ), // 是否在 UI 构建的时候就加载视频 autoInitialize: true, // 拖动条样式颜色 materialProgressColors: new ChewieProgressColors( playedColor: Colors.red, handleColor: Colors.blue, backgroundColor: Colors.grey, bufferedColor: Colors.lightGreen, ), ), ), )):Container( padding: EdgeInsets.only(left:15), child: Text("暂无"), ), Container( width: width, padding: EdgeInsets.only(left:ScreenUtil().setWidth(15),top:ScreenUtil().setWidth(10),bottom:ScreenUtil().setWidth(10)), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: .5, color:Color(0xfff5f5f5)), ), ), child: Text( '现场情况(维修后)', textAlign: TextAlign.left, style: TextStyle( fontSize:ScreenUtil().setSp(17), color:Color(0xff333333), ), ), ), detailObj.afterRepair!=null? Container( padding: EdgeInsets.only( left: ScreenUtil().setWidth(15), right: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(15)), child: ClipRRect( borderRadius: BorderRadius.circular(5), child: new Chewie( controller: ChewieController( videoPlayerController: // VideoPlayerController.network( // Utils.getImagePath(detailObj.afterRepair) // // imgFontUrl + detailObj.url // ) _controllerAfter, aspectRatio: 3 / 2, autoPlay: false, looping: true, showControls: true, deviceOrientationsAfterFullScreen:[DeviceOrientation.portraitUp,], // 占位图 // placeholder: Image.network( // imgFontUrl+detailObj.cover, // fit: BoxFit.contain, // ), // 是否在 UI 构建的时候就加载视频 autoInitialize: true, // 拖动条样式颜色 materialProgressColors: new ChewieProgressColors( playedColor: Colors.red, handleColor: Colors.blue, backgroundColor: Colors.grey, bufferedColor: Colors.lightGreen, ), ), ), )):Container( padding: EdgeInsets.only(left:15), child: Text("暂无"), ), ], ):Container(child: null,), OrderConstant.isShow( detailObj.statuz, detailObj.dataTable, 'showUserAppealInfo') == false ? SizedBox(height: 80) : Container(child: null), OrderConstant.isShow(detailObj.statuz, detailObj.dataTable, 'showUserAppealInfo') ? Container( padding: EdgeInsets.only( left: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(10), bottom: ScreenUtil().setWidth(10)), decoration: BoxDecoration( border: Border( bottom: BorderSide( width: .5, color: Color(0xfff5f5f5)), ), ), child: Text( '申诉信息', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(17), ), ), ) : Container(child: null), OrderConstant.isShow(detailObj.statuz, detailObj.dataTable, 'showUserAppealInfo') ? Container( padding: EdgeInsets.only( left: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(10), bottom: ScreenUtil().setWidth(10)), child: Column( children: [ Row( children: [ Text( '申诉内容:', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(12), color: Color(0xff666666), ), ), Text( detailObj.liftCaseAppealEntity != null && detailObj .liftCaseAppealEntity .content != null ? detailObj.liftCaseAppealEntity .content : '', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(12), color: Color(0xff666666), ), ), ], ), Row( children: [ Text( '申诉时间:', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(12), color: Color(0xff666666), ), ), Text( detailObj.liftCaseAppealEntity != null && detailObj .liftCaseAppealEntity .createTime != null ? DateUtils.instance.getFormartData( timeSamp: detailObj .liftCaseAppealEntity .createTime, format: "yyyy-MM-dd HH:mm:ss") : '', textAlign: TextAlign.left, style: TextStyle( fontSize: ScreenUtil().setSp(12), color: Color(0xff666666), ), ), ], ), ], ), ) : Container(child: null), SizedBox( height: 70, ) ], ), Positioned( bottom: 0, left: 0, child: Container( width: width, height: !getHeight(detailObj)?0: 60, padding: EdgeInsets.only( right: ScreenUtil().setWidth(15), left: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(12), bottom: ScreenUtil().setWidth(12), ), decoration: BoxDecoration( border: Border( top: BorderSide( width: 0.5, color: Color(0xffeeeeee), ), ), color: ThemeUtils.getDialogTextFieldColor(context), ), child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, // children: btnWidget, children: [ OrderConstant.isShow( detailObj.statuz, detailObj.dataTable, 'showUserPaymentButton') && detailObj.chargerId!=null ? BottomBtn( title: "立即付款", fun: () { // showAlert( // context, // "提示", // "确认付款吗?", // "确认", // () { // // payment(); // // NavigatorUtils.goBack(context); // NavigatorUtils.push( // context, "${WodeRouter.buyService}?id=${detailObj.id}"); // }, // txt2: "取消", // onPre2: () { // NavigatorUtils.goBack(context); // }); NavigatorUtils.push( context, "${WodeRouter.buyService}?id=${detailObj.id}"); }, ) : Container(child: null), OrderConstant.isShow( detailObj.statuz, detailObj.dataTable, 'showUserConfirmPunchButton', arrivedFlag: detailObj.arrivedFlag) ? BottomBtn( title: "确认打卡", fun: () { confirmPunchin(); }, ) : Container(child: null), OrderConstant.isShow( detailObj.statuz, detailObj.dataTable, 'showUserAppealButton') ? BottomBtn( title: "提出申诉", fun: () { if(detailObj.liftCaseAppealEntity != null){ toasts("当前诊单不能申诉"); }else { NavigatorUtils.push(context, "${WodeRouter.representations}?id=${detailObj.id}"); } }, ) : Container(child: null), OrderConstant.isShow( detailObj.statuz, detailObj.dataTable, 'showUserConfirmOrderButton') ? BottomBtn( title: "立即确认", fun: () { showAlert( context, "提示", "确认完成吗?", "确认", () { confirmOrder(); NavigatorUtils.goBack(context); }, txt2: "取消", onPre2: () { NavigatorUtils.goBack(context); }); }, ) : Container(child: null), OrderConstant.isShow( detailObj.statuz, detailObj.dataTable, 'showUserEvaluationButton') ? BottomBtn( title: "评价", fun: () { NavigatorUtils.push(context, "${WodeRouter.comment}?id=${detailObj.id}"); }, ) : Container(child: null), OrderConstant.isShow( detailObj.statuz, detailObj.dataTable, 'showUserChooseExpertButton') || (detailObj.chargerId==null && detailObj.isPlatformSpecified == 0) ? BottomBtn( title: "选择专家", fun: () { setDataId(detailObj.id); setType(detailObj.dataTable.toString()); NavigatorUtils.push(context, "${BbsRouter.expertList}?id=${detailObj.brandId}"); }, ) : Container(child: null), ], ), ), ), ], ); }, ) : Center( child: Text("正在加载..."), ), ), ); } void setDataId (int id)async{ SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setInt("dataId", id); } void setType (String type)async{ SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString("questionType", type); } @override bool get wantKeepAlive => true; } class BottomBtn extends StatelessWidget { BottomBtn({Key key, this.title, this.fun}) : super(key: key); Function fun; String title; @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(left: 10), child: GestureDetector( onTap: () { fun(); }, child: Container( child: Container( // height:22, padding: EdgeInsets.only( left: ScreenUtil().setWidth(20), right: ScreenUtil().setWidth(20)), decoration: BoxDecoration( border: Border.all(width: 1, color: Color(0xff1B87F6)), borderRadius: BorderRadius.circular(ScreenUtil().setWidth(17)), ), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( title, textAlign: TextAlign.center, style: TextStyle( fontSize: ScreenUtil().setSp(15), color: Color(0xff0288FF), ), ), ], ), ), ), ), ); } }