order_page.dart 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/widgets/app_bar.dart';
  3. import 'package:liftmanager/routers/fluro_navigator.dart';
  4. import 'package:liftmanager/widgets/load_image.dart';
  5. import 'package:liftmanager/mvp/base_page_state.dart';
  6. import 'dart:async';
  7. import 'package:liftmanager/internal/wode/wode_router.dart';
  8. import 'package:liftmanager/utils/toast.dart';
  9. import 'package:flutter_screenutil/flutter_screenutil.dart';
  10. import 'package:provider/provider.dart';
  11. // import 'package:liftmanager/internal/wode/model/order_model.dart';
  12. import 'package:liftmanager/internal/bbs/model/liftcase_model.dart';
  13. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  14. import 'package:liftmanager/internal/wode/presenter/order_master_list_presenter.dart';
  15. import 'package:liftmanager/widgets/state_layout.dart';
  16. import 'package:liftmanager/mvp/base_page_state.dart';
  17. import 'package:liftmanager/utils/time_format.dart';
  18. import 'package:liftmanager/widgets/my_refresh_list.dart';
  19. import 'package:liftmanager/internal/wode/order_const.dart';
  20. class OrderPageMaster extends StatefulWidget {
  21. OrderPageMaster(this.checkType);
  22. String checkType;
  23. int tabCheckIndex = 0;
  24. @override
  25. // State<StatefulWidget> createState() {
  26. // return OrderPageMasterState();
  27. // }
  28. OrderPageMasterState createState() => OrderPageMasterState();
  29. }
  30. class OrderPageMasterState
  31. extends BasePageState<OrderPageMaster, OrderListPresenterSeconds> {
  32. BaseListProvider<LiftCasesDetailModel> provider =
  33. BaseListProvider<LiftCasesDetailModel>();
  34. int _page = 1;
  35. ScrollController _scrollController = new ScrollController();
  36. @override
  37. void dispose() {
  38. _scrollController.dispose();
  39. super.dispose();
  40. }
  41. @override
  42. void initState() {
  43. if (widget.checkType.isNotEmpty && widget.checkType != null) {
  44. widget.tabCheckIndex = int.parse(widget.checkType);
  45. }
  46. provider.setStateTypeNotNotify(StateType.loading);
  47. super.initState();
  48. _onRefresh();
  49. }
  50. @override
  51. Widget build(BuildContext context) {
  52. double width = MediaQuery.of(context).size.width;
  53. return WillPopScope(
  54. // ignore: missing_return
  55. onWillPop:(){
  56. Navigator.popUntil(context, ModalRoute.withName('/home'));
  57. },
  58. child:ChangeNotifierProvider<BaseListProvider<LiftCasesDetailModel>>(
  59. create: (_) => provider,
  60. child: Scaffold(
  61. appBar: MyAppBar(
  62. centerTitle: "专家订单",
  63. isFun: true,
  64. fun: () {
  65. Navigator.popUntil(context, ModalRoute.withName('/home'));
  66. },
  67. actions: <Widget>[],
  68. ),
  69. body: Container(
  70. child: Stack(
  71. children: <Widget>[
  72. Container(
  73. padding: EdgeInsets.only(top: ScreenUtil().setWidth(44)),
  74. child: Column(
  75. children: <Widget>[
  76. Expanded(
  77. flex: 1,
  78. child: Consumer<BaseListProvider<LiftCasesDetailModel>>(
  79. builder: (_, provider, __) {
  80. return MyListView(
  81. key: Key('order_list'),
  82. itemCount: provider.list.length,
  83. stateType: provider.stateType,
  84. onRefresh: _onRefresh,
  85. loadMore: _loadMore,
  86. hasMore: provider.hasMore,
  87. itemBuilder: (_, index) {
  88. return OrderListItemWidget(
  89. data: provider.list[index],
  90. );
  91. },
  92. );
  93. },
  94. ),
  95. )
  96. ],
  97. ),
  98. ),
  99. Positioned(
  100. child: Container(
  101. padding: EdgeInsets.only(bottom: 5),
  102. // color:Color(0xffFAF7FA),
  103. decoration: BoxDecoration(
  104. border: Border(
  105. bottom: BorderSide(width: 0.5, color: Color(0xffeeeeee)),
  106. ),
  107. // color: Color(0xff9FD1FE),
  108. ),
  109. child: Row(
  110. mainAxisAlignment: MainAxisAlignment.spaceAround,
  111. children:
  112. OrderConstant.expertOrderType.asMap().keys.map((i) {
  113. return TabThis(
  114. item: OrderConstant.expertOrderType[i]['name'],
  115. tabIndex: i,
  116. checkIndex: widget.tabCheckIndex,
  117. fun: (index) {
  118. setState(() {
  119. widget.tabCheckIndex = index;
  120. provider.list.clear();
  121. _onRefresh();
  122. });
  123. });
  124. }).toList(),
  125. ),
  126. ),
  127. ),
  128. ],
  129. ),
  130. ),
  131. ),
  132. )
  133. )
  134. ;
  135. }
  136. Future _onRefresh() async {
  137. _page = 1;
  138. await presenter.getOrderList(
  139. _page, OrderConstant.expertOrderType[widget.tabCheckIndex]['value']);
  140. }
  141. Future _loadMore() async {
  142. _page++;
  143. await presenter.getOrderList(
  144. _page, OrderConstant.expertOrderType[widget.tabCheckIndex]['value']);
  145. }
  146. @override
  147. OrderListPresenterSeconds createPresenter() {
  148. // TODO: implement createPresenter
  149. // throw UnimplementedError();
  150. return OrderListPresenterSeconds();
  151. }
  152. }
  153. class TabThis extends StatelessWidget {
  154. TabThis({Key key, this.item, this.tabIndex, this.fun, this.checkIndex})
  155. : super(key: key);
  156. String item;
  157. int tabIndex;
  158. int checkIndex;
  159. Function fun;
  160. @override
  161. Widget build(BuildContext context) {
  162. return Container(
  163. padding: EdgeInsets.only(top: ScreenUtil().setWidth(10)),
  164. child: Container(
  165. child: Row(
  166. mainAxisAlignment: MainAxisAlignment.center,
  167. children: <Widget>[
  168. GestureDetector(
  169. onTap: () {
  170. fun(tabIndex);
  171. },
  172. child: Container(
  173. padding: EdgeInsets.only(bottom: 6),
  174. decoration: BoxDecoration(
  175. border: Border(
  176. bottom: BorderSide(
  177. width: 2,
  178. color: checkIndex == tabIndex
  179. ? Color(0xff02A0FD)
  180. : Colors.transparent),
  181. ),
  182. // color: Color(0xff9FD1FE),
  183. ),
  184. child: Text(
  185. item,
  186. style: TextStyle(
  187. color: checkIndex == tabIndex
  188. ? Color(0xff02A0FD)
  189. : Color(0xff666666),
  190. fontSize: ScreenUtil().setSp(14),
  191. ),
  192. textAlign: TextAlign.center,
  193. ),
  194. ),
  195. )
  196. ],
  197. ),
  198. ),
  199. );
  200. }
  201. }
  202. class OrderListItemWidget extends StatelessWidget {
  203. OrderListItemWidget({Key key, this.data}) : super(key: key);
  204. LiftCasesDetailModel data;
  205. @override
  206. Widget build(BuildContext context) {
  207. double width = MediaQuery.of(context).size.width;
  208. return IntrinsicWidth(
  209. child: Container(
  210. padding: EdgeInsets.only(top: ScreenUtil().setWidth(10)),
  211. width: width,
  212. // height: 100,
  213. child: GestureDetector(
  214. onTap: () {
  215. NavigatorUtils.push(
  216. context, "${WodeRouter.orderDetailMaster}?id=${data.id}");
  217. },
  218. child: Row(
  219. crossAxisAlignment: CrossAxisAlignment.start,
  220. // mainAxisSize: MainAxisSize.min,
  221. children: <Widget>[
  222. Container(
  223. margin: EdgeInsets.only(
  224. left: ScreenUtil().setWidth(10),
  225. right: ScreenUtil().setWidth(10),
  226. top: ScreenUtil().setWidth(5),
  227. ),
  228. decoration: BoxDecoration(
  229. borderRadius: BorderRadius.circular(
  230. ScreenUtil().setWidth(22),
  231. ),
  232. ),
  233. child: LoadNetworkImage(
  234. data.avatarUrl,
  235. width: ScreenUtil().setWidth(43),
  236. height: ScreenUtil().setWidth(43),
  237. // alignment: Alignment.centerLeft,
  238. ),
  239. ),
  240. Expanded(
  241. child: Container(
  242. padding: EdgeInsets.only(
  243. right: ScreenUtil().setWidth(15),
  244. ),
  245. child: Column(
  246. children: <Widget>[
  247. Container(
  248. child: Row(
  249. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  250. children: <Widget>[
  251. Row(
  252. crossAxisAlignment: CrossAxisAlignment.center,
  253. children: <Widget>[
  254. Text(
  255. data.name ?? '',
  256. style: TextStyle(
  257. fontSize: ScreenUtil().setSp(17),
  258. ),
  259. textAlign: TextAlign.start,
  260. ),
  261. Container(
  262. padding: EdgeInsets.only(left: 5),
  263. child: Text(
  264. data.dataTable == 1 ? '问诊服务' : '出诊服务',
  265. style: TextStyle(
  266. color: Color(0xff0288FF),
  267. fontSize: ScreenUtil().setSp(14),
  268. ),
  269. textAlign: TextAlign.start,
  270. ),
  271. )
  272. ],
  273. ),
  274. Container(
  275. child: Text(
  276. OrderConstant.getStatusName(
  277. data.statuz, data.dataTable,
  278. arrivedFlag: data.arrivedFlag,
  279. userType: 'EXPERT'),
  280. style: TextStyle(
  281. color: [].indexOf(data.statuz) == -1
  282. ? Color(0xff0288FF)
  283. : Color(0xffF84203),
  284. fontSize: ScreenUtil().setSp(14),
  285. ),
  286. textAlign: TextAlign.end,
  287. ),
  288. )
  289. ]),
  290. ),
  291. Container(
  292. child: Row(
  293. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  294. children: <Widget>[
  295. Row(
  296. crossAxisAlignment: CrossAxisAlignment.center,
  297. children: <Widget>[
  298. Text(
  299. data.createTime != null
  300. ? DateUtils.instance.getFormartData(
  301. timeSamp: data.createTime,
  302. format: "MM-dd")
  303. : '',
  304. style: TextStyle(
  305. color: Color(0xff999999),
  306. fontSize: ScreenUtil().setSp(13),
  307. ),
  308. textAlign: TextAlign.start,
  309. ),
  310. Container(
  311. padding: EdgeInsets.only(left: 5),
  312. child: Text(
  313. data.brandName ?? '',
  314. style: TextStyle(
  315. color: Color(0xff999999),
  316. fontSize: ScreenUtil().setSp(13),
  317. ),
  318. textAlign: TextAlign.start,
  319. ),
  320. )
  321. ],
  322. ),
  323. ]),
  324. ),
  325. data.dataTable == 1
  326. ? Container(
  327. child: Row(
  328. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  329. children: <Widget>[
  330. Row(
  331. crossAxisAlignment: CrossAxisAlignment.center,
  332. children: <Widget>[
  333. Text(
  334. '问题描述:',
  335. style: TextStyle(
  336. color: Color(0xff666666),
  337. fontSize: ScreenUtil().setSp(14),
  338. ),
  339. textAlign: TextAlign.start,
  340. ),
  341. Container(
  342. width: 200,
  343. padding: EdgeInsets.only(left: 5),
  344. child: Text(
  345. data.expression ?? '',
  346. style: TextStyle(
  347. color: Color(0xff666666),
  348. fontSize: ScreenUtil().setSp(14),
  349. ),
  350. textAlign: TextAlign.start,
  351. maxLines: 1,
  352. overflow: TextOverflow.ellipsis,
  353. ),
  354. )
  355. ],
  356. ),
  357. ],
  358. ),
  359. )
  360. : Container(
  361. child: Row(
  362. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  363. children: <Widget>[
  364. Row(
  365. crossAxisAlignment: CrossAxisAlignment.center,
  366. children: <Widget>[
  367. Text(
  368. '出诊时间:',
  369. style: TextStyle(
  370. color: Color(0xff666666),
  371. fontSize: ScreenUtil().setSp(14),
  372. ),
  373. textAlign: TextAlign.start,
  374. ),
  375. Container(
  376. padding: EdgeInsets.only(left: 5),
  377. child: Text(
  378. data.arrivedTime != null
  379. ? DateUtils.instance.getFormartData(
  380. timeSamp: data.arrivedTime,
  381. format: "MM-dd HH:mm")
  382. : '',
  383. style: TextStyle(
  384. color: Color(0xff666666),
  385. fontSize: ScreenUtil().setSp(14),
  386. ),
  387. textAlign: TextAlign.start,
  388. ),
  389. )
  390. ],
  391. ),
  392. ],
  393. ),
  394. ),
  395. data.dataTable == 1
  396. ? Container(
  397. child: Row(
  398. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  399. children: <Widget>[
  400. Row(
  401. crossAxisAlignment: CrossAxisAlignment.center,
  402. children: <Widget>[
  403. Text(
  404. '已尝试方法:',
  405. style: TextStyle(
  406. color: Color(0xff666666),
  407. fontSize: ScreenUtil().setSp(14),
  408. ),
  409. textAlign: TextAlign.start,
  410. ),
  411. Container(
  412. width: 200,
  413. padding: EdgeInsets.only(left: 5),
  414. child: Text(
  415. data.usedMethods ?? '',
  416. style: TextStyle(
  417. color: Color(0xff666666),
  418. fontSize: ScreenUtil().setSp(14),
  419. ),
  420. textAlign: TextAlign.start,
  421. maxLines: 1,
  422. overflow: TextOverflow.ellipsis,
  423. ),
  424. )
  425. ],
  426. ),
  427. ],
  428. ),
  429. )
  430. : Container(
  431. child: Row(
  432. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  433. children: <Widget>[
  434. Row(
  435. crossAxisAlignment: CrossAxisAlignment.center,
  436. children: <Widget>[
  437. Text(
  438. '出诊地点:',
  439. style: TextStyle(
  440. color: Color(0xff666666),
  441. fontSize: ScreenUtil().setSp(14),
  442. ),
  443. textAlign: TextAlign.start,
  444. ),
  445. Container(
  446. width: 200,
  447. padding: EdgeInsets.only(left: 5),
  448. child: Text(
  449. data.address ?? '',
  450. style: TextStyle(
  451. color: Color(0xff666666),
  452. fontSize: ScreenUtil().setSp(14),
  453. ),
  454. textAlign: TextAlign.start,
  455. maxLines: 1,
  456. overflow: TextOverflow.ellipsis,
  457. ),
  458. )
  459. ],
  460. ),
  461. ],
  462. ),
  463. ),
  464. data.dataTable == 2
  465. ? Container(
  466. child: Row(
  467. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  468. children: <Widget>[
  469. Row(
  470. crossAxisAlignment: CrossAxisAlignment.center,
  471. children: <Widget>[
  472. Text(
  473. '问题描述:',
  474. style: TextStyle(
  475. color: Color(0xff666666),
  476. fontSize: ScreenUtil().setSp(14),
  477. ),
  478. textAlign: TextAlign.start,
  479. ),
  480. Container(
  481. width: 200,
  482. padding: EdgeInsets.only(left: 5),
  483. child: Text(
  484. data.expression ?? '',
  485. style: TextStyle(
  486. color: Color(0xff666666),
  487. fontSize: ScreenUtil().setSp(14),
  488. ),
  489. textAlign: TextAlign.start,
  490. maxLines: 1,
  491. overflow: TextOverflow.ellipsis,
  492. ),
  493. )
  494. ],
  495. ),
  496. ],
  497. ),
  498. )
  499. : Container(),
  500. Container(
  501. margin: EdgeInsets.only(top: 6),
  502. child: Row(
  503. children: <Widget>[
  504. Container(
  505. padding: EdgeInsets.only(right: 5),
  506. child: Text(
  507. data.totalCost != null
  508. ? "¥${data.totalCost.toString()}"
  509. : '',
  510. style: TextStyle(
  511. color: Color(0xffFD0808),
  512. fontSize: ScreenUtil().setSp(15),
  513. ),
  514. textAlign: TextAlign.start,
  515. ),
  516. ),
  517. ],
  518. ),
  519. )
  520. ],
  521. ),
  522. ),
  523. ),
  524. ],
  525. ),
  526. ),
  527. ));
  528. }
  529. }