order_details.dart 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. import 'package:bot_toast/bot_toast.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:cached_network_image/cached_network_image.dart';
  4. import 'package:flutter/services.dart';
  5. import 'package:twong/api/index.dart';
  6. import 'package:twong/router/base.dart';
  7. import 'package:twong/utils/index.dart';
  8. import 'package:twong/config/style.dart';
  9. import 'package:twong/models/index.dart';
  10. import 'package:twong/widgets/app_bar.dart';
  11. import 'package:twong/widgets/cart_item.dart';
  12. import 'package:twong/widgets/order_utils.dart';
  13. class OrderDetailsPage extends StatefulWidget {
  14. final String orderId;
  15. OrderDetailsPage(this.orderId);
  16. @override
  17. State<StatefulWidget> createState() {
  18. return _OrderDetailsState();
  19. }
  20. }
  21. class _OrderDetailsState extends State<OrderDetailsPage> {
  22. OrderDetails _details;
  23. @override
  24. void initState() {
  25. super.initState();
  26. loadData();
  27. }
  28. void loadData() {
  29. Network.inst.getOrderDetails(widget.orderId).then((value){
  30. if(!mounted) return;
  31. setState(() {
  32. _details = value;
  33. });
  34. }).catchError((err, stack) {
  35. Navigator.pop(context);
  36. });
  37. }
  38. @override
  39. Widget build(BuildContext context) {
  40. return Scaffold(
  41. appBar: DAppBar("订单详情"),
  42. body: _details == null ? Center(child: Utils.loadingWidget)
  43. : SafeArea(child: Column(
  44. children: [
  45. Expanded(child: Container(
  46. color: DColors.back,
  47. child: ListView(
  48. physics: ClampingScrollPhysics(),
  49. children: [
  50. Container(
  51. height: 56.px,
  52. color: DColors.Main,
  53. padding: EdgeInsets.all(6.px),
  54. child: Row(
  55. children: [
  56. Container(
  57. width: 46.px,
  58. height: 46.px,
  59. margin: EdgeInsets.only(right: 12.px, left: 12.px),
  60. child: CachedNetworkImage(imageUrl: _details.status_pic),
  61. ),
  62. Column(
  63. crossAxisAlignment: CrossAxisAlignment.start,
  64. children: [
  65. Expanded(child: Text(_details.orderStatus.msg,
  66. style: TextStyle(color: Colors.white,
  67. fontSize: 13.px))),
  68. Text("下单日期:${Utils.formatData(
  69. _details.add_time)}",
  70. style: TextStyle(color: Colors.white,
  71. fontSize: 11.px)),
  72. ]),
  73. ])),
  74. _buildAddress(),
  75. _buildProducts(),
  76. _buildInfo()
  77. ]),
  78. )),
  79. Container(
  80. height: 56.px,
  81. color: Colors.white,
  82. margin: EdgeInsets.only(right: 12.px),
  83. child: OrderUtils.buildButtons(details: _details),
  84. )
  85. ],
  86. )),
  87. );
  88. }
  89. Widget _buildAddress() {
  90. return Container(
  91. decoration: BoxDecoration(
  92. color: Colors.white,
  93. borderRadius: BorderRadius.circular(6.px)
  94. ),
  95. padding: EdgeInsets.all(6.px),
  96. margin: EdgeInsets.only(left: 12.px, right: 12.px, top: 12.px),
  97. child: Column(
  98. crossAxisAlignment: CrossAxisAlignment.start,
  99. children: [
  100. Row(
  101. children: [
  102. Text(_details.real_name),
  103. Container(width: 22.px),
  104. Text(_details.user_phone)
  105. ],
  106. ),
  107. Text(_details.user_address)
  108. ],
  109. ),
  110. );
  111. }
  112. Widget _buildProducts() {
  113. List<Widget> widgets = List<Widget>();
  114. for(var item in _details.cartInfo) {
  115. widgets.add(InkWell(
  116. child: CartItem(item, action: _details.status == 2 ? Container(
  117. width: 58.px,
  118. height: 22.px,
  119. margin: EdgeInsets.only(left: 12.px),
  120. child: OutlineButton(
  121. onPressed: () {
  122. Navigator.pushNamed(context,
  123. RouteNames.orderComment, arguments: item);
  124. },
  125. shape: StadiumBorder(),
  126. highlightedBorderColor: Colors.transparent,
  127. borderSide: BorderSide(color: DColors.Main),
  128. child: Text("评价", style: TextStyle(
  129. color: DColors.Main, fontSize: 12.px))),
  130. ) : null),
  131. onTap: () { Navigator.pushNamed(context,
  132. RouteNames.productDetails, arguments: item.id); },
  133. ));
  134. widgets.add(Divider());
  135. }
  136. widgets.add(Container(
  137. child: Text("联系客服"),
  138. ));
  139. return Container(
  140. decoration: BoxDecoration(
  141. color: Colors.white,
  142. borderRadius: BorderRadius.circular(6.px)
  143. ),
  144. padding: EdgeInsets.all(6.px),
  145. margin: EdgeInsets.only(left: 12.px, right: 12.px, top: 12.px),
  146. child: Column( children: widgets),
  147. );
  148. }
  149. Widget _buildInfo() {
  150. var style = TextStyle(color: Colors.grey);
  151. return Container(
  152. decoration: BoxDecoration(
  153. color: Colors.white,
  154. borderRadius: BorderRadius.circular(6.px)
  155. ),
  156. padding: EdgeInsets.all(6.px),
  157. margin: EdgeInsets.only(left: 12.px, right: 12.px, top: 12.px),
  158. child: Column(
  159. children: [
  160. Container(padding: EdgeInsets.only(bottom: 6.px), child: Row(
  161. children: [
  162. Expanded(child: Text("订单编号:")),
  163. Text(_details.order_id, style: style),
  164. Container(
  165. width: 46.px,
  166. height: 20.px,
  167. margin: EdgeInsets.only(left: 12.px),
  168. child: OutlineButton(
  169. onPressed: () { Utils.copyText( _details.order_id); },
  170. shape: StadiumBorder(),
  171. highlightColor: Colors.transparent,
  172. highlightedBorderColor: Colors.grey,
  173. borderSide: BorderSide(color: Colors.grey),
  174. child: Text("复制", style: TextStyle(fontSize: 7.px))),
  175. )
  176. ],
  177. )),
  178. Container(padding: EdgeInsets.only(bottom: 6.px), child: Row(
  179. children: [
  180. Expanded(child: Text("下单时间:")),
  181. Text(Utils.formatData(_details.add_time), style: style),
  182. ],
  183. )),
  184. Container(padding: EdgeInsets.only(bottom: 6.px), child: Row(
  185. children: [
  186. Expanded(child: Text("订单类型:")),
  187. Text("普通订单", style: style),
  188. ],
  189. )),
  190. Container(padding: EdgeInsets.only(bottom: 6.px), child: Row(
  191. children: [
  192. Expanded(child: Text("支付状态:")),
  193. Text(_details.orderStatus.title, style: style),
  194. ],
  195. )),
  196. Row(
  197. children: [
  198. Expanded(child: Text("支付方式:")),
  199. Text(_details.orderStatus.payType, style: style),
  200. ],
  201. ),
  202. ],
  203. ),
  204. );
  205. }
  206. }