import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:ysairplane2/code/YSContact.dart'; import 'package:ysairplane2/code/YSPay.dart'; import 'package:ysairplane2/code/view/YSBannerView.dart'; import 'package:ysairplane2/code/view/YSLocationView.dart'; import 'package:ysairplane2/code/view/YSShopView.dart'; import 'package:ysairplane2/tools/YSNetWorking.dart'; import 'package:ysairplane2/tools/YSTools.dart'; class YSContractPlaneDetail extends StatefulWidget { final contractId,isWhole,arriveId; const YSContractPlaneDetail({Key key, this.contractId, this.isWhole, this.arriveId}) : super(key: key); @override _YSContractPlaneDetailState createState() => _YSContractPlaneDetailState(); } class _YSContractPlaneDetailState extends State { //List _tags = ['服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)','服务热情(346)',]; bool _isDetail = false; bool _isOrder = false; Map _msgDict,_detailDict; List _chooses = []; String _timeStr; List _packList = []; List _priceList = []; int _selected = 0; int _index = 9999; List _customer = []; bool _isShow = false; String _noticeStr = ''; Timer _timer; int _timeNum = 0; List _allPrices = []; var _timeSet; double _serviceAmount = 0; @override void dispose() { if(_timer!=null){ _timer.cancel(); } super.dispose(); } @override void initState() { Future.delayed(Duration(seconds: 0)).then((value){ _getBackImageData(); _getContractPlaneDetailData(); _getNoticeData(); _getPackData(); }); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xFFF1F2F4), body: Stack( children: [ SingleChildScrollView( child: Column( children: [ Container( height: MediaQuery.of(context).size.height-hsp(120), child: SingleChildScrollView( child: Stack( children: [ if(_detailDict!=null)YSBannerView(dataArray: _detailDict['bannerArray']??[]), GestureDetector( onTap: (){Navigator.pop(context);}, child: Container( margin: EdgeInsets.only(left: wsp(32),top: MediaQuery.of(context).padding.top+hsp(30)), child: Icon(Icons.arrow_back_ios,size: hsp(40),color: Colors.white,), ), ), // if(_msgDict!=null)Container( // margin: EdgeInsets.only(left: wsp(50),top: MediaQuery.of(context).padding.top+hsp(200)), // child: RichText( // text: TextSpan( // text: '${_msgDict['name']} ', // style: TextStyle(fontSize: zsp(50),color: Colors.white,fontWeight: FontWeight.bold), // children: [ // TextSpan( // text: '${_msgDict['subtitle']}', // style: TextStyle(fontWeight: FontWeight.normal,fontSize: zsp(28),color: Colors.white.withOpacity(0.5)) // ) // ] // ), // ), // ), Container( margin: EdgeInsets.only(top: MediaQuery.of(context).padding.top+hsp(300)), child: Column( children: [ Container( width: MediaQuery.of(context).size.width-wsp(60), margin: EdgeInsets.only(left: wsp(30),bottom: hsp(20)), padding: EdgeInsets.all(hsp(30)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if(_detailDict!=null)Container( margin: EdgeInsets.only(bottom: hsp(30)), child: Row( children: [ GestureDetector( onTap: (){ showInformAlert(context,title: '${_detailDict['dtPartner']['companyName']}',content: _detailDict['dtPartner']['content']); }, child: RichText( text: TextSpan( text: '${_detailDict['dtPartner']['companyName']}'.length>7? '${_detailDict['dtPartner']['companyName']}'.substring(0,7)+'..':'${_detailDict['dtPartner']['companyName']}', style: TextStyle(fontSize: zsp(28),color: Color(0xFF444444)), children: [ TextSpan( text: ' >', style: TextStyle(color: Color(0xFF2C7CF6)) ) ] ), ), ), Container( margin: EdgeInsets.only(left: wsp(40),right: wsp(40)), child: GestureDetector( onTap: (){ showInformAlert(context,title: '${_detailDict['dtFlightInformation']['model']}', content: '${_detailDict['dtFlightInformation']['content']}'); }, child: RichText( text: TextSpan( text: '${_detailDict!=null?_detailDict['dtFlightInformation']['model']:''}', style: TextStyle(fontSize: zsp(28),color: Color(0xFF444444)), children: [ TextSpan( text: ' >', style: TextStyle(color: Color(0xFF2C7CF6)) ) ] ), ), ), ), if(_detailDict!=null)RichText( text: TextSpan( text: '可乘坐人数${_detailDict['dtFlightInformation']['seatNum']}人', style: TextStyle(fontSize: zsp(28),color: Color(0xFF444444)), children: [ ] ), ) ], ), ), Divider(height: 0.5,thickness: 0.5,color: Color(0xFFEAEAEA),), if(_detailDict!=null)YSLocationView( locationStr: _detailDict['location']??'', latitude: _detailDict['latitude']??'0', longitude: _detailDict['longitude']??'0' ), Container( padding: EdgeInsets.only(top: hsp(20)), child: Column( children: [ Row( children: [ Container( child: Text('${_detailDict!=null?_detailDict['setoutInfo']['display']:''}', style: TextStyle(fontSize: zsp(40),fontWeight: FontWeight.bold,color: Colors.black),), width: (MediaQuery.of(context).size.width-hsp(210))/2, alignment: Alignment.centerLeft, ), Image(height: hsp(60),width: hsp(60),image: AssetImage('lib/images/plane.png'),), Container( child: Text('${_detailDict!=null?_detailDict['arriveInfo']['display']:''}',style: TextStyle(fontSize: zsp(40),fontWeight: FontWeight.bold,color: Colors.black),), width: (MediaQuery.of(context).size.width-hsp(210))/2, alignment: Alignment.centerRight, ), ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child: Text('${_detailDict!=null?_detailDict['setoutInfo']['airplaneName']:''}',style: TextStyle(fontSize: zsp(24),color: Color(0xFF999999)),), width: (MediaQuery.of(context).size.width-hsp(400))/2, alignment: Alignment.centerLeft, ), Text('${_detailDict!=null?_detailDict['hour']:''}',style: TextStyle(fontSize: zsp(20),color: Color(0xFF343434)),), Container( child: Text('${_detailDict!=null?_detailDict['arriveInfo']['airplaneName']:''}',style: TextStyle(fontSize: zsp(24),color: Color(0xFF999999)),), width: (MediaQuery.of(context).size.width-hsp(400))/2, alignment: Alignment.centerRight, ), ], ), ], ), ), Divider(height: 0.5,thickness: 0.5,color: Color(0xFFEAEAEA),), Container( padding: EdgeInsets.only(top: hsp(20)), child: Column( children: [ Text('出发',style: TextStyle(fontSize: zsp(24),color: Color(0xFF666666)),), RichText( text: TextSpan( text: '${_detailDict!=null?_detailDict['flightTime']:''}', style: TextStyle(fontSize: zsp(36),fontWeight: FontWeight.bold,color: Colors.black), children: [ // TextSpan( // text: '今天', // style: TextStyle(fontSize: zsp(24),fontWeight: FontWeight.normal), // ) ] ), ) ], crossAxisAlignment: CrossAxisAlignment.start, ), ) ], ), ), if(widget.isWhole==1)if(_detailDict!=null)Container( width: MediaQuery.of(context).size.width-wsp(60), margin: EdgeInsets.only(left: wsp(30),top: hsp(20)), child: Row( children: [ Container( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('拼座价(元/座): ${_detailDict['discountPrice']}起',style: TextStyle(fontSize: zsp(30),color: Colors.white),), Text('原价(元/座): ${_detailDict['price']}起',style: TextStyle(fontSize: zsp(26),color: Colors.white),), Text('剩${_detailDict['dtFlightInformation']['seatNum']}座',style: TextStyle(fontSize: zsp(24),color: Colors.white),), ], ), width: (MediaQuery.of(context).size.width-wsp(60))*0.6, height: hsp(170), decoration: BoxDecoration( color: Color(0xFFDC402F), borderRadius: BorderRadius.only(topLeft: Radius.circular(5),bottomLeft: Radius.circular(5)) ), alignment: Alignment.centerLeft, padding: EdgeInsets.all(hsp(20)), ), StatefulBuilder( builder: (context,set){ _timeSet = set; return Container( child: _timeNum==0?Text('拼团已截止',style: TextStyle(fontSize: zsp(32),color: Color(0xFFAA2E1D)),):Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('截止拼团时间',style: TextStyle(fontSize: zsp(26),color: Color(0xFFAA2E1D)),), Text('${_timeNum~/86400>0?'${_timeNum~/86400}天 ':''}' '${'${_timeNum%86400~/3600}'.padLeft(2,'0')}:' '${'${_timeNum%3600~/60}'.padLeft(2,'0')}:' '${'${_timeNum%3600%60}'.padLeft(2,'0')}' ,style: TextStyle(fontSize: zsp(32),color: Color(0xFFAA2E1D)),), ], ), width: (MediaQuery.of(context).size.width-wsp(60))*0.4, height: hsp(170), decoration: BoxDecoration( color: Color(0xFFEAC364), borderRadius: BorderRadius.only(bottomRight: Radius.circular(5),topRight: Radius.circular(5)) ), alignment: Alignment.center, padding: EdgeInsets.only(left: hsp(20),right: hsp(20),top: hsp(35),bottom: hsp(35)), ); }, ) ], ), ), Container( width: MediaQuery.of(context).size.width-wsp(60), margin: EdgeInsets.only(left: wsp(30)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white, ), child: YSSetMealView(packageArray: _packList,valueSetter: (value){ _index = value; _isOrder = true; _getPriceData(); }), ), Container( width: MediaQuery.of(context).size.width-wsp(60), margin: EdgeInsets.only(left: wsp(30),top: hsp(20)), padding: EdgeInsets.all(hsp(30)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white, ), child: Column( children: [ Row( children: [ Text('评价(${_detailDict!=null?_detailDict['dtOrderScoringNum']:''})',style: TextStyle(fontSize: zsp(36),color: Color(0xFF000000),fontWeight: FontWeight.bold),), Text('更多',style: TextStyle(fontSize: zsp(28),color: Color(0xFF444444)),), ], mainAxisAlignment: MainAxisAlignment.spaceBetween, ), Container( margin: EdgeInsets.only(top: hsp(30),bottom: hsp(30),right: wsp(10)), height: hsp(120), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child: Column( children: [ RichText( text: TextSpan( text: '${_detailDict!=null?_detailDict['averageRating']:'0'}', style: TextStyle(fontSize: zsp(60),color: Color(0xFFED5E58),fontWeight: FontWeight.bold), children: [ TextSpan( text: ' 超赞', style: TextStyle(fontSize: zsp(24),fontWeight: FontWeight.normal), ) ] ), ), Text('高于${_detailDict!=null?_detailDict['scoreScale']:'0'}同类型航空',style: TextStyle(fontSize: zsp(20),color: Color(0xFF202020)),), ], ), width: wsp(200), ), Container( height: hsp(120), width: MediaQuery.of(context).size.width-hsp(120)-wsp(210)-wsp(60), margin: EdgeInsets.only(left: wsp(10),right: wsp(0)), child: GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, childAspectRatio: (MediaQuery.of(context).size.width-hsp(120)-wsp(210)-wsp(60))/2/hsp(60) ), itemBuilder: (context, index) { return Container( height: hsp(60), child: Row( children: [ Text('${_detailDict['dtOrderScoringTypeList'][index]['name']} ${_detailDict['dtOrderScoringTypeList'][index]['avatarOrderScoring']} ',style: TextStyle(fontSize: zsp(22),color: Color(0xFF202020)),), Container( height: hsp(8), decoration: BoxDecoration( color: Color(0xFFED5E58), borderRadius: BorderRadius.all(Radius.circular(50)) ), width: wsp(60)*(double.parse('${_detailDict['dtOrderScoringTypeList'][index]['avatarOrderScoring']}')/ double.parse('${_detailDict['dtOrderScoringTypeList'][index]['totalScore']}')), ) ], ), ); }, itemCount: _detailDict!=null?_detailDict['dtOrderScoringTypeList'].length:0, padding: EdgeInsets.all(0), physics: NeverScrollableScrollPhysics(), ), ) ], ), ), // Container( // width: MediaQuery.of(context).size.width-hsp(120), // child: Wrap( // alignment: WrapAlignment.start, // children: [ // for (int i =0;i<_tags.length;i++ ) GestureDetector( // behavior: HitTestBehavior.opaque, // onTap: (){ // // }, // child: Container( // margin: EdgeInsets.symmetric(vertical: hsp(10), horizontal: hsp(10)), // decoration: BoxDecoration( // color: Color(0xFFFDF1F1), // borderRadius: BorderRadius.all(Radius.circular(5)) // ), // padding: EdgeInsets.only(left: wsp(15), right: wsp(15),top: hsp(10),bottom: hsp(10)), // child: Text('${_tags[i]}', style: TextStyle(fontSize: zsp(22),color: Color(0xFF000000)), textAlign: TextAlign.center,), // ), // ) // ] // ), // ), ListView.separated( shrinkWrap: true, itemBuilder: (context,index){ return Container( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Container( height: hsp(90), width: hsp(90), margin: EdgeInsets.only(right: wsp(20)), decoration: BoxDecoration( color: Colors.lightGreen, borderRadius: BorderRadius.all(Radius.circular(50)), image: DecorationImage(image: NetworkImage('${_detailDict['dtOrderScoringContentList'][index]['dtUsers']['avatar']}'),fit: BoxFit.fill) ), ), Container( height: hsp(80), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('${_detailDict['dtOrderScoringContentList'][index]['dtUsers']['nickname']}',style: TextStyle(fontSize: zsp(28),color: Color(0xFF000000),fontWeight: FontWeight.bold),), Text('${_detailDict['dtOrderScoringContentList'][index]['createTime']}',style: TextStyle(fontSize: zsp(22),color: Color(0xFF9A9A9A)),) ], ), ) ], ), Container( margin: EdgeInsets.only(top: hsp(20),bottom: hsp(20)), child: ysTextExpend(text: '${_detailDict['dtOrderScoringContentList'][index]['content']}', style: TextStyle(fontSize: zsp(28),color: Color(0xFF000000)),maxLines: 3,) ), if(_detailDict['dtOrderScoringContentList'][index]['picture']!=null)GridView.builder( shrinkWrap: true, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, childAspectRatio: (MediaQuery.of(context).size.width-hsp(140)-wsp(60))/3/hsp(160), crossAxisSpacing: hsp(10), mainAxisSpacing: hsp(10) ), itemBuilder: (context, indexSub) { return Container( height: hsp(160), child: Image( image: NetworkImage('${(_detailDict['dtOrderScoringContentList'][index]['picture']).split(',')[indexSub]}'), fit: BoxFit.fill, ), ); }, itemCount: _detailDict!=null?(_detailDict['dtOrderScoringContentList'][index]['picture']).split(',').length:0, padding: EdgeInsets.all(0), physics: NeverScrollableScrollPhysics(), ) ], ), ); }, separatorBuilder: (context,index){ return Divider(color: Colors.white,height: hsp(20),thickness: hsp(20),); }, itemCount: (_detailDict!=null&&_detailDict['dtOrderScoringContentList']!=null)?_detailDict['dtOrderScoringContentList'].length:0, padding: EdgeInsets.only(left: hsp(15),right: hsp(15),top: hsp(15)), physics: NeverScrollableScrollPhysics(), ), ], ), ), if(_detailDict!=null)Container( decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white, ), width: MediaQuery.of(context).size.width-wsp(60), margin: EdgeInsets.only(left: wsp(30),top: hsp(20)), child: YSShopView( shop: _detailDict['partnerInfo'], location: '${_detailDict['longitude']},${_detailDict['latitude']}', type: 8, ), ), Container( width: MediaQuery.of(context).size.width-wsp(60), margin: EdgeInsets.only(left: wsp(30),bottom: hsp(50),top: hsp(20)), padding: EdgeInsets.all(hsp(30)), decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), color: Colors.white, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('航线详情',style: TextStyle(fontSize: zsp(36),color: Color(0xFF000000),fontWeight: FontWeight.bold),), Container( margin: EdgeInsets.only(top: hsp(30),bottom: hsp(10)), child: RichText( text: TextSpan( text: '航线: ', style: TextStyle(fontSize: zsp(28),color: Color(0xFF929292)), children: [ TextSpan( text: '${_detailDict!=null?_detailDict['setoutInfo']['display']:''} - ${_detailDict!=null?_detailDict['arriveInfo']['display']:''}', style: TextStyle(color: Color(0xFF343434)) ) ] ), ) ), RichText( text: TextSpan( text: '日期: ', style: TextStyle(fontSize: zsp(28),color: Color(0xFF929292)), children: [ TextSpan( text: '${_detailDict!=null?_detailDict['flightTime']:''}', style: TextStyle(color: Color(0xFF343434)) ) ] ), ) ], ), ) ], ), ), ], ), ), ), Row( children: [ GestureDetector( onTap: (){ alertPhone(context, ''); }, child: Container( width: MediaQuery.of(context).size.width*0.2, height: hsp(120), color: Colors.white, alignment: Alignment.center, child: Column( mainAxisSize: MainAxisSize.min, children: [ Icon(Icons.headset,color: Color(0xFF2C7CF6),size: hsp(40),), Text('咨询',style: TextStyle(fontSize: zsp(22),color: Color(0xFF007EFF),fontWeight: FontWeight.bold),) ], ), ), ), GestureDetector( onTap: (){ _index = 0; _isOrder = true; _getPriceData(); // _getPackData(); }, child: Container( width: MediaQuery.of(context).size.width*0.8, height: hsp(120), color: widget.isWhole==true?Color(0xFF51A2F5):Color(0xFF007EFF), alignment: Alignment.center, child: Column( mainAxisSize: MainAxisSize.min, children: [ Text('${widget.isWhole==1?'拼机':'整机'}特惠价 (元)',style: TextStyle(fontSize: zsp(20),color: Colors.white,fontWeight: FontWeight.bold),), Text('¥${_detailDict!=null?_detailDict[widget.isWhole==1?'retailPrice':'retailPrice']:''}',style: TextStyle(fontSize: zsp(36),color: Colors.white,fontWeight: FontWeight.bold),) ], ), ), ), ], ) ], ), ), if(_isOrder==true)GestureDetector( onTap: (){ _serviceAmount = 0; setState(() { _isOrder = false; }); }, child: Container( height: MediaQuery.of(context).size.height, width: MediaQuery.of(context).size.width, color: Colors.black54, child: GestureDetector( onTap: (){}, child: Column( children: [ Container( height: MediaQuery.of(context).size.height*0.8-hsp(120), width: MediaQuery.of(context).size.width, margin: EdgeInsets.only(top: MediaQuery.of(context).size.height*0.2), decoration: BoxDecoration( color: Color(0xFFF1F2F3), borderRadius: BorderRadius.only(topLeft: Radius.circular(10),topRight: Radius.circular(10)) ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( height: hsp(100), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only(topLeft: Radius.circular(10),topRight: Radius.circular(10)) ), padding: EdgeInsets.only(left: 15,right: 15), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container(width: wsp(50),), Text('订单确认',style: TextStyle(fontSize: 15,color: Color(0xFF000000),decoration: TextDecoration.none,fontWeight: FontWeight.bold),), GestureDetector( child: Text('关闭',style: TextStyle(fontSize: 15,color: Color(0xFF007EFF),decoration: TextDecoration.none,fontWeight: FontWeight.bold),), onTap: (){ _serviceAmount = 0; setState(() { _isOrder = false; }); }, ), ], ), ), Divider(height: 0.5,thickness: 0.5,color: Color(0xFFE5E5E5),), Container( height: MediaQuery.of(context).size.height*0.8-hsp(220)-0.5, child: SingleChildScrollView( padding: EdgeInsets.all(0), child: Column( children: [ Container( padding: EdgeInsets.all(hsp(30)), color: Colors.white, width: MediaQuery.of(context).size.width, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('使用日期',style: TextStyle(fontSize: zsp(30),color: Color(0xFF9A9A9A)),), Container( margin: EdgeInsets.only(top: hsp(20)), child: Row( children: [ Container( height: hsp(120), width: MediaQuery.of(context).size.width-hsp(200), child: ListView.separated( itemBuilder: (context,index){ return GestureDetector( behavior: HitTestBehavior.opaque, onTap: (){ _timeStr = _priceList[index]['time']; setState(() { _selected = index; }); }, child: Stack( children: [ Container( height: hsp(120), width: (MediaQuery.of(context).size.width-hsp(230))/3, decoration: BoxDecoration( color: index==_selected?Color(0xFF007EFF):Color(0xFFF0EEEE), borderRadius: BorderRadius.all(Radius.circular(5)) ), alignment: Alignment.center, child: Text('${_priceList[index]['time']} \n¥${_priceList[index]['price']}', style: TextStyle(fontSize: zsp(20),color: index==_selected?Colors.white:Color(0xFF8B8B8B)),textAlign: TextAlign.center,), ), if(_selected==index)Container( child: Text(timeTag('${_priceList[index]['time']}'),style: TextStyle(fontSize: zsp(16),color: Color(0xFF007EFF)),), height: hsp(30), padding: EdgeInsets.only(left: wsp(3),right: wsp(3)), decoration: BoxDecoration( color: Color(0xFFF7F7F7), borderRadius: BorderRadius.only(topLeft: Radius.circular(3),bottomRight: Radius.circular(5)) ), alignment: Alignment.center, ), ], ), ); }, separatorBuilder: (context,index){ return Container(width: hsp(15),color: Colors.white,); }, itemCount: _priceList.length, padding: EdgeInsets.all(0), scrollDirection: Axis.horizontal, ), ), if(_allPrices.length>1)GestureDetector( onTap: (){ dateChooseAlert( context, dateValue: (dateValue){ int index = 0; _priceList.clear(); _priceList.addAll(_allPrices); for(int i=0;i<_priceList.length;i++){ DateTime date1 = DateTime.parse('${_priceList[i]['time']}'); DateTime date2 = DateTime.parse('$dateValue 00:00:00'); if(date1.year==date2.year&&date1.month==date2.month&&date1.day==date2.day){ index = i; } } _priceList.removeRange(0, index); _selected = 0; _timeStr = _priceList[_selected]['time']; setState(() {}); }, count: 45, startStr: _allPrices[0]['time'] ); }, behavior: HitTestBehavior.opaque, child: Container( height: hsp(120), width: hsp(140), alignment: Alignment.center, child: Text('更多\n日期',style: TextStyle(fontSize: zsp(26),color: Color(0xFF007EFF)),), ), ) ], ), ), ], ), ), Container( padding: EdgeInsets.all(hsp(30)), margin: EdgeInsets.only(top: hsp(10)), color: Colors.white, width: MediaQuery.of(context).size.width, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if(_index!=9999)Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child: Text('${_packList[_index]['name']}',style: TextStyle(fontSize: zsp(40),color: Color(0xFF000000),fontWeight: FontWeight.bold),), width: (MediaQuery.of(context).size.width-hsp(100))*0.7, ), Container( child: Text('¥${_packList[_index]['price']}',style: TextStyle(fontSize: zsp(40),color: Color(0xFFEB423B)),), width: (MediaQuery.of(context).size.width-hsp(100))*0.3, alignment: Alignment.centerRight, ), ], ), Container( margin: EdgeInsets.only(top: hsp(20),bottom: hsp(20)), child: Text('${_detailDict!=null?_detailDict['setoutInfo']['display']:''} - ${_detailDict!=null?_detailDict['arriveInfo']['display']:''}', style: TextStyle(fontSize: zsp(32),color: Color(0xFF000000),fontWeight: FontWeight.bold),), ), GestureDetector( onTap: (){ showInformAlert(context,title: '预定须知',content: _noticeStr); }, child: RichText( text: TextSpan( text: '预订须知', style: TextStyle(fontSize: zsp(24),color: Color(0xFF027FFF)), children: [ TextSpan( text: ' >', style: TextStyle(color: Color(0xFF000000)) ) ] ), ), ) ], ), ), Container( child: Text('出行人',style: TextStyle(fontSize: zsp(30),color: Color(0xFF9A9A9A)),), alignment: Alignment.centerLeft, height: hsp(80), padding: EdgeInsets.only(left: hsp(30)), margin: EdgeInsets.only(top: hsp(10)), width: MediaQuery.of(context).size.width, color: Colors.white, ), Container( padding: EdgeInsets.only(left: hsp(30),right: hsp(30),top: hsp(20)), margin: EdgeInsets.only(top: hsp(1)), color: Colors.white, width: MediaQuery.of(context).size.width, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: EdgeInsets.only(left: hsp(30),right: hsp(30),bottom: hsp(20)), child: GestureDetector( onTap: (){ Navigator.of(context).push( CupertinoPageRoute( builder: (context){ return YSContact(); } ) ).then((value){ if(value!=null){ if(_customer.contains(value)){ _customer.remove(value); } setState(() { _customer.insert(0, value); }); } }); }, child: Container( height: hsp(60), width: hsp(160), decoration: BoxDecoration( color: Color(0xFF007EFF), borderRadius: BorderRadius.all(Radius.circular(5)) ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon(Icons.add_circle,color: Colors.white,size: hsp(30),), Text(' 新增',style: TextStyle(fontSize: zsp(28),color: Colors.white),), ], ), alignment: Alignment.center, ), ) , ), ], ), ), Container( color: Colors.white, child: ListView.separated( itemBuilder: (context,index){ return Container( color: Colors.white, padding: EdgeInsets.only(top: hsp(20),bottom: hsp(20),left: hsp(50),right: hsp(50)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ GestureDetector( child: Icon(Icons.remove_circle,color: Colors.red,size: hsp(50),), onTap: (){ setState(() { _customer.removeAt(index); }); }, ), Container( width: MediaQuery.of(context).size.width-hsp(180), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('${_customer[index]['username']} ${_customer[index]['phone']}',style: TextStyle(fontSize: zsp(34),color: Color(0xFF343434),fontWeight: FontWeight.bold),), Text('身份证 ${_customer[index]['cardid']}',style: TextStyle(fontSize: zsp(25),color: Color(0xFF666666)),) ], ), ), //Icon(Icons.mode_edit,color: Color(0xFF9A9A9A),size: hsp(50),), ], ), ); }, separatorBuilder: (context,index){ return Divider(height: 0.5,thickness: 0.5,indent: hsp(100),); }, itemCount: _customer.length, shrinkWrap: true, padding: EdgeInsets.all(0), physics: NeverScrollableScrollPhysics(), ), ), Container( margin: EdgeInsets.only(top: hsp(20)), padding: EdgeInsets.only(bottom: hsp(20)), width: MediaQuery.of(context).size.width, color: Colors.white, child: YSGoodsServiceView( key: serviceKey, personArray: _customer, type: 8, tourId: widget.contractId, totalSetter: (value){ _serviceAmount = value; setState(() {}); }, ), ) // GestureDetector( // onTap: (){ // setState(() { // _isShow = !_isShow; // }); // }, // behavior: HitTestBehavior.opaque, // child: Container( // padding: EdgeInsets.only(left: wsp(40),right: wsp(40),top: hsp(20),bottom: hsp(20)), // margin: EdgeInsets.only(top: hsp(10)), // color: Colors.white, // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Text('更多服务',style: TextStyle(fontSize: zsp(30),color: Color(0xFF9A9A9A)),), // Icon(Icons.keyboard_arrow_down,size: hsp(50),color: Color(0xFFC1C1C1),) // ], // ) // ), // ), // if(_isShow==true)Container( // padding: EdgeInsets.only(left: wsp(32),right: wsp(32),top: hsp(20),bottom: hsp(10)), // decoration: BoxDecoration( // color: Color(0xFFFAFAFA), // borderRadius: BorderRadius.only(bottomRight: Radius.circular(10),bottomLeft: Radius.circular(10)) // ), // child: ListView.builder( // shrinkWrap: true, // itemBuilder: (context,index){ // return Container( // padding: EdgeInsets.only(bottom: wsp(20)), // child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // Row( // children: [ // Text('${_packList[index]['name']}',style: TextStyle(fontSize: zsp(28),color: Color(0xFF999999)),), // Container( // width: wsp(50), // child: GestureDetector( // child: Icon(Icons.error_outline,size: hsp(40),color: Color(0xFF999999)), // ), // ), // Text('${_packList[index]['price']}元',style: TextStyle(fontSize: zsp(28),color: Colors.black),), // ], // ), // GestureDetector( // child: Container( // height: hsp(60), // width: hsp(100), // child: Image.asset(_chooses.contains(_packList[index])==true?'lib/images/kaiguankai.png':'lib/images/kaiguanguan.png'), // ), // onTap: (){ // setState(() { // if(_chooses.contains(_packList[index])==true){ // _chooses.remove(_packList[index]); // }else{ // _chooses.add(_packList[index]); // } // }); // }, // ) // ], // ), // ); // }, // itemCount: _packList.length, // padding: EdgeInsets.only(bottom: hsp(30)), // physics: NeverScrollableScrollPhysics(), // ), // ) ], ), ), ), ], ), ), Container( height: hsp(120), width: MediaQuery.of(context).size.width, color: Colors.white, padding: EdgeInsets.only(left: wsp(30),right: wsp(30)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ RichText( text: TextSpan( text: '参考价(¥)', style: TextStyle(fontSize: zsp(22),color: Color(0xFF181818)), children: [ TextSpan( text: ' ${_getPrice()}', style: TextStyle(fontSize: zsp(40),color: Color(0xFFFF6600)), ) ] ), ), GestureDetector( child: Row( children: [ Text('明细',style: TextStyle(fontSize: zsp(22),color: Color(0xFF181818)),), Icon(Icons.keyboard_arrow_up,size: hsp(30),color: Color(0xFF007EFF),), ], ), onTap: (){ setState(() { _isDetail = !_isDetail; }); }, ), GestureDetector( onTap: (){ _postPlaneOrderData(); }, child: Container( height: hsp(70), padding: EdgeInsets.only(left: wsp(50),right: wsp(50)), decoration: BoxDecoration( color: Color(0xFF007EFF), borderRadius: BorderRadius.all(Radius.circular(50)) ), alignment: Alignment.center, child: Text('立即预约',style: TextStyle(fontSize: zsp(30),color: Colors.white,fontWeight: FontWeight.bold),), ), ) ], ), ) ], ), ), ), ), if(_isDetail==true)GestureDetector( onTap: (){ setState(() { _isDetail = false; }); }, child: Container( height: MediaQuery.of(context).size.height-hsp(120), color: Colors.black45, child: Container( margin: EdgeInsets.only(top: MediaQuery.of(context).size.height-hsp(120)-hsp(470)), height: hsp(470), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only(topLeft: Radius.circular(10),topRight: Radius.circular(10)) ), child: GestureDetector( onTap: (){}, behavior: HitTestBehavior.opaque, child: Column( children: [ Container( height: hsp(100), padding: EdgeInsets.only(left: 15,right: 15), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ GestureDetector( child: Text('关闭',style: TextStyle(fontSize: 15,color: Color(0xFF007EFF),decoration: TextDecoration.none),), onTap: (){ setState(() { _isDetail = false; }); }, ), Text('明细',style: TextStyle(fontSize: 15,color: Color(0xFF000000),decoration: TextDecoration.none,fontWeight: FontWeight.bold),), Container(width: wsp(50),), ], ), ), Container( height: hsp(100), color: Color(0xFFF7F8F9), padding: EdgeInsets.only(left: wsp(40),right: wsp(40),bottom: hsp(20),top: hsp(20)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [//x ${_customer.length==0?1:_customer.length}人 Text('座位',style: TextStyle(fontSize: zsp(32),color: Color(0xFF000000),decoration: TextDecoration.none),), Text('¥ ${_priceList[_selected]['price']}',style: TextStyle(fontSize: 15,color: Color(0xFF007EFF),decoration: TextDecoration.none),), ], ), ), if(_serviceAmount>0)Container( height: hsp(100), color: Color(0xFFF7F8F9), padding: EdgeInsets.only(left: wsp(40),right: wsp(40),bottom: hsp(20),top: hsp(10)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('服务费',style: TextStyle(fontSize: zsp(28),color: Color(0xFF9A9A9A)),), Text('¥ $_serviceAmount',style: TextStyle(fontSize: zsp(28),color: Color(0xFF9A9A9A)),), ], ), ), Container( color: Color(0xFFF7F8F9), height: hsp(170), child: ListView.builder( padding: EdgeInsets.all(0), itemBuilder: (context,index){ return Container( padding: EdgeInsets.only(left: wsp(40),right: wsp(40),bottom: hsp(10)), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('${_chooses[index]['name']}',style: TextStyle(fontSize: zsp(28),color: Color(0xFF9A9A9A)),), Text('¥ ${_chooses[index]['price']}',style: TextStyle(fontSize: zsp(28),color: Color(0xFF9A9A9A)),), ], ), ); }, itemCount: _chooses.length, ), ) ], ), ), ), ), ) ], ), ); } _getBackImageData() async{ Map dict = await ysRequestHttp(context,type: requestType.get,api: '/app/applets/wallconfigure/get',parameter: {'type':8},isLoading: false,isToken: false); if(dict!=null){ setState(() { _msgDict = dict['data']; }); } } _getContractPlaneDetailData() async{ Map request = {}; request['type'] = 8; request['id'] = widget.contractId; if(widget.arriveId!=null){ request['airportIdArrive'] = widget.arriveId; } Map dict = await ysRequestHttp(context,type: requestType.get,api: '/app/applets/AirTour/getTour',parameter: request,isLoading: false,isToken: false); if(dict!=null){ setState(() { _detailDict = dict['data']; }); if(_detailDict['groupDeadline']!=null){ DateTime date1 = DateTime.now(); DateTime date2 = DateTime.parse('${_detailDict['groupDeadline']}'); _timeNum = date2.difference(date1).inSeconds.toInt(); _timer = Timer.periodic(Duration(seconds: 1), (timer){ if(_timeNum<=1){ _timer.cancel(); }else{ _timeNum--; } _timeSet(() {}); }); } } } _getPackData() async{ Map dict = await ysRequestHttp(context,type: requestType.get,api: '/app/servicegroup/dtAirplaneServiceGroups/queryGroupService',parameter: {'type':8,'tourId':widget.contractId}, isLoading: true,isToken: false); if(dict!=null){ _packList = dict['data']; setState(() {}); } } _getPriceData() async{ Map dict = await ysRequestHttp(context,type: requestType.get,api: '/app/applets/airplaneorder/getDateAndTime', parameter: {'type':8,'tourId':widget.contractId},isLoading: true,isToken: true); if(dict!=null){ _priceList = dict['data']; _allPrices.clear(); _allPrices.addAll(_priceList); _chooses.clear(); if(_index!=9999){ _chooses.add(_packList[_index]); } if(_priceList.length>0){ _timeStr = _priceList[0]['time']; } _selected = 0; setState(() {}); } } _getPrice(){ double price = 0; // _chooses.forEach((element) { // price+=double.parse('${element['price']}'); // }); if(_index==0){ price = double.parse('${_priceList[_selected]['price']}'); }else{ price+=double.parse('${_chooses[_index]['price']}'); } price+=_serviceAmount; return price.toStringAsFixed(2); } _postPlaneOrderData() async{ if(_customer.length==0){ ysFlutterToast(context, '出行人数不能为空'); return; } Map requestDict = {}; requestDict['flightTime'] = _timeStr; requestDict['type'] = 8; requestDict['airplaneid'] = _detailDict['airplaneid']; requestDict['personnelInfo'] = _customer; requestDict['charterType'] = widget.isWhole==1?1:2; requestDict['airportidSetout'] = _detailDict['setoutInfo']['id']; requestDict['airportidArrive'] = _detailDict['arriveInfo']['id']; requestDict['tourId'] = widget.contractId; if(_index!=9999)requestDict['setmealIds'] = _packList[_index]['id']; List array = []; // _chooses.forEach((element) { // array.add(element['id']); // }); // requestDict['serviceIds'] = array.join(','); showNegotiateAlertDio( context, content: _noticeStr, sure: () async{ Map dict = await ysRequestHttp(context,type: requestType.post,api: '/app/applets/airplaneorder/createOrder',parameter: requestDict,isLoading: true,isToken: true); if(dict!=null){ Navigator.of(context).push( CupertinoPageRoute( builder: (context){ return YSPay(orderDict: dict['data'],type: payType.preferential,); } ) ); } } ); } _getNoticeData() async{ Map dict = await ysRequestHttp(context,type: requestType.get,api: '/app/applets/airplaneservice/ctrip',parameter: {'type':8}); if(dict!=null){ _noticeStr = dict['data']['value']; } } }