coupon_page.dart 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/res/gaps.dart';
  3. import 'package:liftmanager/net/api_service.dart';
  4. import 'package:liftmanager/utils/toast.dart';
  5. import 'package:liftmanager/widgets/app_bar.dart';
  6. import 'package:liftmanager/internal/search/search_router.dart';
  7. import 'package:liftmanager/widgets/app_search_bar.dart';
  8. import 'package:liftmanager/res/resources.dart';
  9. import 'package:liftmanager/routers/fluro_navigator.dart';
  10. import 'package:liftmanager/widgets/load_image.dart';
  11. import 'package:liftmanager/internal/bbs/bbs_router.dart';
  12. import 'package:liftmanager/internal/means/means_router.dart';
  13. // import 'package:amap_all_fluttify/amap_all_fluttify.dart';
  14. import 'package:provider/provider.dart';
  15. import 'package:permission_handler/permission_handler.dart';
  16. import 'dart:async';
  17. import 'package:liftmanager/widgets/my_card.dart';
  18. import 'package:flutter_screenutil/flutter_screenutil.dart';
  19. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  20. import 'package:liftmanager/mvp/base_page_state.dart';
  21. import 'package:liftmanager/internal/bbs/model/coupon_model_page.dart';
  22. import 'package:liftmanager/internal/wode/presenter/red_list_presenter.dart';
  23. import 'package:liftmanager/widgets/my_refresh_list.dart';
  24. import 'package:liftmanager/widgets/state_layout.dart';
  25. import 'package:liftmanager/utils/time_format.dart';
  26. import 'package:liftmanager/utils/log_util.dart';
  27. class CouponPage extends StatefulWidget {
  28. @override
  29. CouponPageState createState() => CouponPageState();
  30. }
  31. class CouponPageState extends BasePageState<CouponPage,CoupontListPresenter>
  32. with AutomaticKeepAliveClientMixin{
  33. // NewsDetailItem item = NewsDetailItem();
  34. BaseListProvider<Records> provider =
  35. BaseListProvider<Records>();
  36. ScrollController _scrollController = new ScrollController();
  37. int _page = 1;
  38. int usedFlag = 1;//0失效1可使用
  39. int checkIndex = 0;
  40. @override
  41. void initState() {
  42. provider.setStateTypeNotNotify(StateType.loading);
  43. super.initState();
  44. _onRefresh();
  45. print(66666);
  46. }
  47. @override
  48. void dispose() {
  49. _scrollController.dispose();
  50. super.dispose();
  51. }
  52. getScenario(int type){
  53. String str;
  54. if(type==0){
  55. str = "全场通用";
  56. }else if (type==1){
  57. str = "仅限出诊问诊服务";
  58. }else if(type==2){
  59. str = "仅限题库";
  60. }else if(type==3){
  61. str = "仅限视频";
  62. }
  63. return str;
  64. }
  65. static const staticList = [
  66. {
  67. "price":"5",
  68. "time":"2019-12-30",
  69. },
  70. {
  71. "price":"5",
  72. "time":"2019-12-30",
  73. },
  74. {
  75. "price":"5",
  76. "time":"2019-12-30",
  77. },
  78. {
  79. "price":"5",
  80. "time":"2019-12-30",
  81. },
  82. {
  83. "price":"5",
  84. "time":"2019-12-30",
  85. },
  86. {
  87. "price":"5",
  88. "time":"2019-12-30",
  89. },
  90. {
  91. "price":"5",
  92. "time":"2019-12-30",
  93. },
  94. {
  95. "price":"5",
  96. "time":"2019-12-30",
  97. },
  98. {
  99. "price":"5",
  100. "time":"2019-12-30",
  101. },
  102. ];
  103. @override
  104. Widget build(BuildContext context) {
  105. double width = MediaQuery.of(context).size.width;
  106. return
  107. ChangeNotifierProvider<BaseListProvider<Records>>(
  108. create: (_) => provider,
  109. child:
  110. Scaffold(
  111. resizeToAvoidBottomPadding: true,
  112. appBar: MyAppBar(
  113. centerTitle:"我的优惠券"
  114. ),
  115. body: Container(
  116. // color: Color(0xFFF1F4FC),
  117. child: Column(
  118. crossAxisAlignment: CrossAxisAlignment.start,
  119. children: <Widget>[
  120. Container(
  121. padding: EdgeInsets.only(bottom:5),
  122. // color:Color(0xffFAF7FA),
  123. decoration: BoxDecoration(
  124. border: Border(
  125. bottom: BorderSide(width: 0.5, color: Color(0xffeeeeee)),
  126. ),
  127. // color: Color(0xff9FD1FE),
  128. ),
  129. child:Row(
  130. children:<Widget>[
  131. Container(
  132. width: width/2,
  133. padding: EdgeInsets.only(top:10),
  134. child:Row(
  135. mainAxisAlignment: MainAxisAlignment.center,
  136. children:<Widget>[
  137. GestureDetector(
  138. onTap: (){
  139. print(6663);
  140. provider.list.clear();
  141. setState(() {
  142. checkIndex = 0;
  143. usedFlag = 1;
  144. });
  145. _onRefresh();
  146. },
  147. child: Container(
  148. padding: EdgeInsets.only(bottom:6),
  149. decoration: BoxDecoration(
  150. border: Border(
  151. bottom: BorderSide(width: 2, color: checkIndex==0? Color(0xff02A0FD):Colors.white),
  152. ),
  153. // color: Color(0xff9FD1FE),
  154. ),
  155. child:Text(
  156. '可使用',
  157. style: TextStyle(
  158. color:checkIndex==0? Color(0xff02A0FD):Color(0xff666666),
  159. // fontSize:ScreenUtil().setSp(14)
  160. ),
  161. textAlign:TextAlign.center,
  162. ),
  163. )
  164. )
  165. ]
  166. )
  167. ),
  168. Container(
  169. width: width/2,
  170. padding: EdgeInsets.only(top:ScreenUtil().setWidth(10)),
  171. child:Row(
  172. mainAxisAlignment: MainAxisAlignment.center,
  173. children:<Widget>[
  174. GestureDetector(
  175. onTap: (){
  176. // Provider.of<BaseListProvider<Records>>(context,listen: false).list.clear();
  177. provider.list.clear();
  178. setState(() {
  179. checkIndex = 1;
  180. usedFlag = 0;
  181. });
  182. _onRefresh();
  183. },
  184. child: Container(
  185. padding: EdgeInsets.only(bottom:6),
  186. decoration: BoxDecoration(
  187. border: Border(
  188. bottom: BorderSide(width: 2, color: checkIndex==1? Color(0xff02A0FD):Colors.transparent),
  189. ),
  190. ),
  191. child:Text(
  192. '已失效',
  193. style: TextStyle(
  194. color:checkIndex==1? Color(0xff02A0FD):Color(0xff666666),
  195. // fontSize:ScreenUtil().setSp(14)
  196. ),
  197. textAlign:TextAlign.center,
  198. ),
  199. )
  200. )
  201. ]
  202. )
  203. ),
  204. ]
  205. )
  206. ),
  207. Expanded(
  208. flex: 1,
  209. child: Consumer<BaseListProvider<Records>>(
  210. builder: (_, provider, __) {
  211. return MyListView(
  212. key: Key('coupon_list'),
  213. itemCount: provider.list.length,
  214. stateType: provider.stateType,
  215. onRefresh: _onRefresh,
  216. loadMore: _loadMore,
  217. pageSize: 8,
  218. hasMore: provider.hasMore,
  219. itemBuilder: (_, index) {
  220. return Container(
  221. child: Column(
  222. children: <Widget>[
  223. Container(
  224. child:Row(
  225. children:<Widget>[
  226. Container(
  227. padding: EdgeInsets.only(top:ScreenUtil().setWidth(15),left:ScreenUtil().setWidth(15),right:ScreenUtil().setWidth(15)),
  228. child: Stack(
  229. children: <Widget>[
  230. Positioned(
  231. top:0,
  232. left:0,
  233. child: Container(
  234. width:width-ScreenUtil().setWidth(30),
  235. height:ScreenUtil().setWidth(104),
  236. child:LoadAssetImage(
  237. // image: AssetImage(i['img']),
  238. checkIndex == 0?"wode/bg_front":"wode/bg_back",
  239. fit: BoxFit.cover,
  240. // alignment: Alignment.centerLeft,
  241. ),
  242. )
  243. ),
  244. Container(
  245. // decoration: BoxDecoration(
  246. // border:Border.all(
  247. // width:2,
  248. // color:Colors.red
  249. // )
  250. // ),
  251. width:width-ScreenUtil().setWidth(30),
  252. height:ScreenUtil().setWidth(100),
  253. child: Row(
  254. children: <Widget>[
  255. Container(
  256. padding: EdgeInsets.only(right:ScreenUtil().setWidth(40),left:ScreenUtil().setWidth(10)),
  257. child:Column(
  258. crossAxisAlignment: CrossAxisAlignment.center,
  259. mainAxisAlignment: MainAxisAlignment.center,
  260. children:<Widget>[
  261. Row(
  262. crossAxisAlignment: CrossAxisAlignment.center,
  263. children: <Widget>[
  264. Text(
  265. '¥',
  266. textAlign: TextAlign.center,
  267. style: TextStyle(
  268. fontSize:ScreenUtil().setSp(16),
  269. color:checkIndex==0?Colors.white:Color(0xff999999),
  270. ),
  271. ),
  272. Text(
  273. provider.list[index].coupon?.discount?.toString(),
  274. textAlign: TextAlign.center,
  275. style: TextStyle(
  276. fontSize:ScreenUtil().setSp(28),
  277. color:checkIndex==0?Colors.white:Color(0xff999999),
  278. ),
  279. ),
  280. ],
  281. ),
  282. Text(
  283. getScenario(provider.list[index].coupon?.scenario??0),
  284. textAlign: TextAlign.left,
  285. style: TextStyle(
  286. fontSize:ScreenUtil().setSp(12),
  287. color:checkIndex==0?Colors.white:Color(0xff999999),
  288. ),
  289. ),
  290. ]
  291. ),
  292. ),
  293. Container(
  294. padding: EdgeInsets.only(top:ScreenUtil().setWidth(10)),
  295. child:Column(
  296. crossAxisAlignment: CrossAxisAlignment.start,
  297. children:<Widget>[
  298. Text(
  299. provider.list[index].coupon?.name??"",
  300. textAlign: TextAlign.left,
  301. style: TextStyle(
  302. fontSize:ScreenUtil().setSp(16),
  303. color:Color(0xff333333),
  304. ),
  305. ),
  306. Text(
  307. DateUtils.instance
  308. .getFormartData(
  309. timeSamp: provider.list[index].coupon?.validity,
  310. format: "yyyy-MM-dd HH:mm:ss")+'过期',
  311. textAlign: TextAlign.left,
  312. style: TextStyle(
  313. fontSize:ScreenUtil().setSp(13),
  314. color:Color(0xff9F9C9F),
  315. ),
  316. ),
  317. SizedBox(
  318. height:20
  319. ),
  320. Container(
  321. width: width*0.5,
  322. height:0.5,
  323. color:Color(0xffeeeeee),
  324. child: null,
  325. ),
  326. SizedBox(
  327. height:3
  328. ),
  329. Text(
  330. provider.list[index].coupon?.remark??"",
  331. textAlign: TextAlign.left,
  332. style: TextStyle(
  333. fontSize:ScreenUtil().setSp(13),
  334. color:Color(0xff9F9C9F),
  335. ),
  336. ),
  337. ]
  338. )
  339. ),
  340. ],
  341. )
  342. ),
  343. Positioned(
  344. top:0,
  345. right:5,
  346. child:checkIndex == 1?Container(
  347. child: Icon(
  348. IconData(
  349. 0xe6d9,
  350. fontFamily:"myfont"
  351. ),
  352. size: 50.0,
  353. color:Color(0xff999999),
  354. ),
  355. ):Container(child:null)
  356. )
  357. ],
  358. ),
  359. ),
  360. Container()
  361. ]
  362. )
  363. )
  364. ],
  365. ),
  366. );
  367. },
  368. );
  369. })
  370. )
  371. ],
  372. ),
  373. ),
  374. ));
  375. }
  376. Future _onRefresh() async {
  377. _page = 1;
  378. await presenter.getRedList( _page,usedFlag);
  379. }
  380. Future _loadMore() async {
  381. _page++;
  382. await presenter.getRedList(_page,usedFlag);
  383. }
  384. @override
  385. CoupontListPresenter createPresenter() {
  386. return CoupontListPresenter();
  387. }
  388. bool get wantKeepAlive => true;
  389. }