order_detail_page.dart 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import '../../util/api.dart';
  4. import '../../util/models.dart';
  5. import '../../util/util.dart';
  6. import '../../showAlert.dart';
  7. class OrderDetailPage extends StatefulWidget {
  8. final String orderNo;
  9. OrderDetailPage({
  10. Key key,
  11. @required this.orderNo
  12. }): super(key: key);
  13. _OrderDetailPageState createState() => _OrderDetailPageState();
  14. }
  15. class _OrderDetailPageState extends State < OrderDetailPage > {
  16. OrderDetailData orderDetailObj;
  17. @override
  18. void initState() {
  19. super.initState();
  20. getOrderDetail(widget.orderNo).then((resp){
  21. if(isNotError(context, resp)){
  22. OrderDetailObj tempObj = OrderDetailObj.fromJson(resp.data);
  23. setState(() {
  24. orderDetailObj =tempObj.data;
  25. });
  26. }
  27. });
  28. }
  29. @override
  30. Widget build(BuildContext context) {
  31. return Scaffold(
  32. appBar: AppBar(
  33. title: Text("订单详情", style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36)), ),
  34. centerTitle: true,
  35. backgroundColor: Color.fromRGBO(64, 98, 254, 1),
  36. ),
  37. body: Container(
  38. padding: EdgeInsets.fromLTRB(0, ScreenUtil.getInstance().setHeight(20), 0, ScreenUtil.getInstance().setHeight(20)),
  39. color: Color.fromRGBO(246, 246, 254, 1),
  40. child:orderDetailObj==null?Center(
  41. child:_getMoreWidget(),
  42. ): ListView(
  43. children: < Widget > [
  44. _sendInfo(),
  45. _getInfo(),
  46. ItemInfoWidget(obj:orderDetailObj),
  47. ],
  48. )
  49. ),
  50. //resizeToAvoidBottomPadding: false //键盘弹出,页面不跟随向上滑动,防止出现溢出错误
  51. );
  52. }
  53. Widget _sendInfo() {
  54. return Container(
  55. color: Colors.white,
  56. margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
  57. child: Column(
  58. children: < Widget > [
  59. titleWidget('lib/images/icon_send.png', '发件信息'),
  60. underLine(),
  61. contentWiget('电话', orderDetailObj.senderPhone),
  62. contentWiget('企业编码', orderDetailObj.sendCompanyCode),
  63. contentWiget('企业名称', orderDetailObj.sendCompanyName),
  64. contentWiget('城市/区域', '${orderDetailObj.sendCompanyProvinceName}'+' '+'${orderDetailObj.sendCompanyCityName}'+' '+ '${orderDetailObj.sendCompanyAreaName}'),
  65. lastContentWiget('详细地址', orderDetailObj.sendCompanyAddress)
  66. ],
  67. )
  68. );
  69. }
  70. Widget _getInfo() {
  71. return Container(
  72. color: Colors.white,
  73. margin: EdgeInsets.only(bottom: ScreenUtil.getInstance().setHeight(20)),
  74. child: Column(
  75. children: < Widget > [
  76. titleWidget('lib/images/icon_shoujian.png', '收件信息'),
  77. underLine(),
  78. contentWiget('企业名称', orderDetailObj.receiptCompanyName),
  79. contentWiget('电话', orderDetailObj.receiptCompanyPhone),
  80. contentWiget('城市/区域', '${orderDetailObj.receiptCompanyProvinceName}'+' '+ '${orderDetailObj.receiptCompanyCityName}'+' '+ '${orderDetailObj.receiptCompanyAreaName}'),
  81. lastContentWiget('详细地址', orderDetailObj.sendCompanyAddress)
  82. ],
  83. )
  84. );
  85. }
  86. }
  87. class ItemInfoWidget extends StatefulWidget {
  88. final OrderDetailData obj;
  89. ItemInfoWidget({
  90. Key key,
  91. @required this.obj
  92. }): super(key: key);
  93. _ItemInfoWidgetState createState() => _ItemInfoWidgetState();
  94. }
  95. class _ItemInfoWidgetState extends State < ItemInfoWidget > {
  96. double afterTransportFee=0.0;//运费
  97. int afterGoodsNumber=0;//数量
  98. double afterCollectingFee=0.0;//代收
  99. bool submitStatus = true;
  100. @override
  101. void initState() {
  102. super.initState();
  103. setState(() {
  104. afterTransportFee = widget.obj.goodsFreight/100;
  105. afterGoodsNumber =widget.obj.goodsQuantity;
  106. afterCollectingFee =widget.obj.goodsAgencyFund/100;
  107. });
  108. }
  109. @override
  110. Widget build(BuildContext context) {
  111. return Container(
  112. child: Container(
  113. color: Colors.white,
  114. child: Column(
  115. crossAxisAlignment: CrossAxisAlignment.start,
  116. children: < Widget > [
  117. titleWidget('lib/images/icon_huowu.png', "货物信息"),
  118. underLine(),
  119. contentWiget("货物名称",widget.obj.goods),
  120. _inputWidget("数量", widget.obj.goodsQuantity),
  121. _inputWidget("运费", widget.obj.goodsFreight/100),
  122. _inputWidget("代收", widget.obj.goodsAgencyFund/100),
  123. contentWiget("保价", widget.obj.goodsPriceProtection.toString()),
  124. contentWiget("重量", widget.obj.goodsWeight.toStringAsFixed(1)),
  125. _descWidget(widget.obj.memo),
  126. submitBtn(widget.obj.orderNo)
  127. ],
  128. ),
  129. )
  130. );
  131. }
  132. Widget _inputWidget(String key, num value) {
  133. return Padding(
  134. padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
  135. child: Column(
  136. children: < Widget > [
  137. SizedBox(
  138. height: ScreenUtil.getInstance().setHeight(89),
  139. child: Center(
  140. child: Row(
  141. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  142. children: < Widget > [
  143. Text(key, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
  144. Container(
  145. width: ScreenUtil.getInstance().setWidth(300),
  146. child: Row(
  147. mainAxisAlignment: MainAxisAlignment.end,
  148. children: < Widget > [
  149. Expanded(
  150. //padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(20)),
  151. //child: Text(value,style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
  152. child: Center(
  153. child: TextField(
  154. keyboardType: TextInputType.number,
  155. textAlign: TextAlign.end,
  156. style: TextStyle(
  157. fontSize: ScreenUtil.getInstance().setSp(30),
  158. color: Color.fromRGBO(136, 136, 136, 1)
  159. ),
  160. decoration: InputDecoration(
  161. border: InputBorder.none,
  162. hintText: value.toString(),
  163. hintStyle: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)),
  164. contentPadding: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(20), 0, 0, 0),
  165. ),
  166. onChanged: (value){
  167. if(key=='数量'){
  168. afterGoodsNumber =int.parse(value);
  169. }else if(key=='运费'){
  170. afterTransportFee =double.parse(value);
  171. String temp = afterTransportFee.toStringAsFixed(1);
  172. afterTransportFee = double.parse(temp);
  173. }else if(key=='代收'){
  174. afterCollectingFee =double.parse(value);
  175. String temp = afterCollectingFee.toStringAsFixed(1);
  176. afterCollectingFee = double.parse(temp);
  177. }
  178. },
  179. ),
  180. )
  181. ),
  182. Icon(Icons.keyboard_arrow_right, color: Color.fromRGBO(199, 199, 204, 1), )
  183. ],
  184. )
  185. )
  186. ],
  187. ),
  188. )
  189. ),
  190. Expanded(
  191. flex: 0,
  192. child: underLine()
  193. )
  194. ],
  195. )
  196. );
  197. }
  198. Widget _descWidget(String str) {
  199. return
  200. Container(
  201. padding: EdgeInsets.all(ScreenUtil.getInstance().setWidth(30)),
  202. child: Text(str, maxLines: 100, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
  203. );
  204. }
  205. Widget submitBtn(String orderNo) {
  206. return GestureDetector(
  207. child: Container(
  208. margin: EdgeInsets.fromLTRB(ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(50), ScreenUtil.getInstance().setWidth(30), ScreenUtil.getInstance().setWidth(40)),
  209. height: ScreenUtil.getInstance().setHeight(88),
  210. decoration: BoxDecoration(
  211. borderRadius: BorderRadius.all(Radius.circular(4)),
  212. color: Color.fromRGBO(37, 102, 242, 1),
  213. ),
  214. child: Center(
  215. child:Row(
  216. mainAxisAlignment: MainAxisAlignment.center,
  217. children: <Widget>[
  218. Offstage(
  219. offstage: submitStatus,
  220. child: SizedBox(
  221. width: ScreenUtil.getInstance().setWidth(45),
  222. height: ScreenUtil.getInstance().setHeight(45),
  223. child: Image.asset('lib/images/loading.gif'),
  224. ),
  225. ),
  226. Text('提交', style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(36), color: Colors.white)),
  227. ],
  228. )
  229. ),
  230. ),
  231. onTap: () {
  232. if(!submitStatus) return;
  233. setState(() {
  234. submitStatus = false;
  235. });
  236. updataOrder(orderNo,afterTransportFee,afterCollectingFee,afterGoodsNumber).then((resp){
  237. if(isNotError(context, resp)){
  238. showDialog < Null > (
  239. context: context, //BuildContext对象
  240. barrierDismissible: false,
  241. builder: (BuildContext context) {
  242. return MyAlertDialog( //调用对话框
  243. text: '订单修改成功!', childCallback: (val) {
  244. if(val){
  245. Navigator.pop(context,true);
  246. }
  247. },
  248. );
  249. });
  250. }else{
  251. setState(() {
  252. submitStatus = true;
  253. });
  254. }
  255. });
  256. },
  257. );
  258. }
  259. }
  260. Widget titleWidget(String iconUrl, String str) {
  261. return Container(
  262. height: ScreenUtil.getInstance().setHeight(90),
  263. padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
  264. child: Center(
  265. child: Row(
  266. mainAxisAlignment: MainAxisAlignment.start,
  267. children: < Widget > [
  268. Padding(
  269. padding: EdgeInsets.only(right: ScreenUtil.getInstance().setHeight(20)),
  270. child: Image.asset(
  271. iconUrl,
  272. width: ScreenUtil.getInstance().setWidth(40),
  273. height: ScreenUtil.getInstance().setHeight(40),
  274. )
  275. ),
  276. Text(str, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(32)), )
  277. ],
  278. ),
  279. ),
  280. );
  281. }
  282. Widget underLine() {
  283. return Container(
  284. color: Color.fromRGBO(223, 223, 223, 1),
  285. height: ScreenUtil.getInstance().setHeight(1),
  286. );
  287. }
  288. Widget contentWiget(String key, String value) {
  289. return Padding(
  290. padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
  291. child: Column(
  292. children: < Widget > [
  293. Padding(
  294. padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(30)),
  295. child: SizedBox(
  296. height: ScreenUtil.getInstance().setHeight(89),
  297. child: Center(
  298. child: Row(
  299. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  300. children: < Widget > [
  301. Text(key, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
  302. Text(value, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
  303. ],
  304. ),
  305. )
  306. )
  307. ),
  308. Expanded(
  309. flex: 0,
  310. child: underLine()
  311. )
  312. ],
  313. )
  314. );
  315. }
  316. Widget lastContentWiget(String key, String value) {
  317. return Padding(
  318. padding: EdgeInsets.only(left: ScreenUtil.getInstance().setWidth(30)),
  319. child:
  320. Padding(
  321. padding: EdgeInsets.only(right: ScreenUtil.getInstance().setWidth(30)),
  322. child: SizedBox(
  323. height: ScreenUtil.getInstance().setHeight(89),
  324. child: Center(
  325. child: Row(
  326. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  327. children: < Widget > [
  328. Text(key, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(74, 74, 74, 1)), ),
  329. Text(value, style: TextStyle(fontSize: ScreenUtil.getInstance().setSp(30), color: Color.fromRGBO(136, 136, 136, 1)), ),
  330. ],
  331. ),
  332. )
  333. )
  334. ),
  335. );
  336. }
  337. Widget _getMoreWidget() {
  338. return Center(
  339. child: Padding(
  340. padding: EdgeInsets.all(10.0),
  341. child: Row(
  342. mainAxisAlignment: MainAxisAlignment.center,
  343. crossAxisAlignment: CrossAxisAlignment.center,
  344. children: < Widget > [
  345. Text(
  346. '加载中...',
  347. style: TextStyle(fontSize: 16.0),
  348. ),
  349. Container(
  350. width: ScreenUtil.getInstance().setWidth(50),
  351. height: ScreenUtil.getInstance().setHeight(50),
  352. child: CircularProgressIndicator()
  353. )
  354. ],
  355. ),
  356. ),
  357. );
  358. }