rewards_detail_page.dart 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. import 'package:cpt_rewards/modules/rewards_confirm/rewards_confirm_page.dart';
  2. import 'package:cs_resources/theme/app_colors_theme.dart';
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:auto_route/auto_route.dart';
  6. import 'package:flutter_hooks/flutter_hooks.dart';
  7. import 'package:hooks_riverpod/hooks_riverpod.dart';
  8. import 'package:router/ext/auto_router_extensions.dart';
  9. import 'package:shared/utils/log_utils.dart';
  10. import 'package:shared/utils/color_utils.dart';
  11. import 'package:widgets/ext/ex_widget.dart';
  12. import 'package:widgets/load_state_layout.dart';
  13. import 'package:widgets/my_appbar.dart';
  14. import 'package:widgets/my_load_image.dart';
  15. import 'package:widgets/my_text_view.dart';
  16. import 'package:widgets/shatter/picker_container.dart';
  17. import 'package:widgets/widget_export.dart';
  18. import 'package:cs_resources/generated/assets.dart';
  19. import '../../../router/page/rewards_page_router.dart';
  20. import './rewards_detail_vm.dart';
  21. @RoutePage()
  22. class RewardsDetailPage extends HookConsumerWidget {
  23. final int? id;
  24. const RewardsDetailPage(
  25. {Key? key,
  26. @PathParam('id') required this.id}) : super(key: key);
  27. //启动当前页面
  28. static void startInstance({
  29. BuildContext? context,
  30. int? id,
  31. }) {
  32. if (context != null) {
  33. context.router.push(RewardsDetailPageRoute(id: id));
  34. } else {
  35. appRouter.push(RewardsDetailPageRoute(id: id));
  36. }
  37. }
  38. // listitem
  39. Widget _buildSaleItem(BuildContext context, WidgetRef ref, _vm) {
  40. return Column(
  41. children: [
  42. Container(
  43. decoration: const BoxDecoration(
  44. color: Colors.white,
  45. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  46. boxShadow: [
  47. BoxShadow(
  48. color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
  49. ],
  50. ),
  51. width: MediaQuery.of(context).size.width - 30,
  52. // height: 420,
  53. // margin: const EdgeInsets.only(left: 15, right: 15, top: 12.5),
  54. child: Column(
  55. children: [
  56. const MyAssetImage(
  57. Assets.rewardsRewardsIndex1,
  58. // width: 110,
  59. height: 150,
  60. ),
  61. Column(
  62. crossAxisAlignment: CrossAxisAlignment.start,
  63. mainAxisAlignment: MainAxisAlignment.start,
  64. children: [
  65. const Text(
  66. maxLines: 1, // 设置最大行数为2
  67. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  68. 'Cute children multifunctional ……',
  69. style: TextStyle(
  70. fontSize: 16.0,
  71. color: Colors.black,
  72. fontWeight: FontWeight.w500),
  73. ),
  74. Text(
  75. maxLines: 1, // 设置最大行数为2
  76. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  77. 'Hong Ye Group Co., Ltd',
  78. style: TextStyle(
  79. fontSize: 13.0,
  80. color: ColorUtils.string2Color('#808DAF'),
  81. fontWeight: FontWeight.w400),
  82. ).marginOnly(bottom: 5),
  83. Row(
  84. children: [
  85. const Text(
  86. '300',
  87. style: TextStyle(
  88. fontSize: 19.0,
  89. color: Colors.black,
  90. fontWeight: FontWeight.w500),
  91. ),
  92. Text(
  93. '350',
  94. style: TextStyle(
  95. decoration: TextDecoration.lineThrough,
  96. decorationColor:
  97. ColorUtils.string2Color('#808DAF'),
  98. decorationStyle: TextDecorationStyle.solid,
  99. fontSize: 12.0,
  100. color: ColorUtils.string2Color('#808DAF'),
  101. fontWeight: FontWeight.w400),
  102. ).marginOnly(left: 5, right: 5),
  103. const Text(
  104. 'Points',
  105. style: TextStyle(
  106. fontSize: 13.0,
  107. color: Colors.black,
  108. fontWeight: FontWeight.w400),
  109. ),
  110. ],
  111. ),
  112. Text(
  113. 'Cute children multifunctional umbrella, at a favorable price and versatile, is a must-have product for home travel, easy to carry and easy to use',
  114. style: TextStyle(
  115. fontSize: 13.0,
  116. color: ColorUtils.string2Color('#808DAF'),
  117. fontWeight: FontWeight.w400),
  118. ).marginOnly(bottom: 10, top: 10),
  119. Container(
  120. height: 28,
  121. decoration: BoxDecoration(
  122. color: ColorUtils.string2Color('#F2F3F6'),
  123. borderRadius:
  124. const BorderRadius.all(Radius.circular(6.0)),
  125. ),
  126. child: Row(
  127. mainAxisSize: MainAxisSize.min,
  128. mainAxisAlignment: MainAxisAlignment.start,
  129. crossAxisAlignment: CrossAxisAlignment.center,
  130. children: [
  131. const MyAssetImage(
  132. Assets.rewardsRewardsDetailDay,
  133. width: 25,
  134. height: 25,
  135. ).marginOnly(right: 5),
  136. Text(
  137. maxLines: 1, // 设置最大行数为2
  138. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  139. 'Redeem. From today until 15 Apr 2021',
  140. style: TextStyle(
  141. fontSize: 14.0,
  142. color: ColorUtils.string2Color('#808DAF'),
  143. fontWeight: FontWeight.w400),
  144. )
  145. ],
  146. ).paddingOnly(left: 7, right: 12)),
  147. Container(
  148. height: 28,
  149. decoration: BoxDecoration(
  150. color: ColorUtils.string2Color('#F2F3F6'),
  151. borderRadius:
  152. const BorderRadius.all(Radius.circular(6.0)),
  153. ),
  154. child: Row(
  155. mainAxisSize: MainAxisSize.min,
  156. mainAxisAlignment: MainAxisAlignment.start,
  157. crossAxisAlignment: CrossAxisAlignment.center,
  158. children: [
  159. const MyAssetImage(
  160. Assets.rewardsRewardsDetailRequired,
  161. width: 25,
  162. height: 25,
  163. ).marginOnly(right: 5),
  164. Text(
  165. maxLines: 1, // 设置最大行数为2
  166. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  167. 'No Reservation Required',
  168. style: TextStyle(
  169. fontSize: 14.0,
  170. color: ColorUtils.string2Color('#808DAF'),
  171. fontWeight: FontWeight.w400),
  172. )
  173. ],
  174. ).paddingOnly(left: 7, right: 12))
  175. .marginOnly(top: 8, bottom: 25)
  176. ],
  177. ).paddingOnly(left: 15, right: 15, top: 10),
  178. ],
  179. )),
  180. ],
  181. ).marginOnly(left: 15, bottom: 15, right: 15);
  182. }
  183. Widget _buildDeal(BuildContext context, WidgetRef ref, _vm) {
  184. return Column(
  185. children: [
  186. Container(
  187. decoration: const BoxDecoration(
  188. color: Colors.white,
  189. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  190. boxShadow: [
  191. BoxShadow(
  192. color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
  193. ],
  194. ),
  195. width: MediaQuery.of(context).size.width - 30,
  196. child: Column(
  197. crossAxisAlignment: CrossAxisAlignment.start,
  198. children: [
  199. Row(
  200. mainAxisSize: MainAxisSize.min,
  201. mainAxisAlignment: MainAxisAlignment.start,
  202. crossAxisAlignment: CrossAxisAlignment.center,
  203. children: [
  204. const MyAssetImage(
  205. Assets.rewardsRewardsDetailDeal,
  206. width: 25,
  207. height: 25,
  208. ).marginOnly(right: 10),
  209. Text(
  210. 'Redeem Deal At',
  211. style: TextStyle(
  212. fontSize: 15.0,
  213. color: ColorUtils.string2Color('#000000'),
  214. fontWeight: FontWeight.w500),
  215. )
  216. ],
  217. ),
  218. Container(
  219. height: 77,
  220. decoration: BoxDecoration(
  221. color: ColorUtils.string2Color('#F2F3F6'),
  222. borderRadius:
  223. const BorderRadius.all(Radius.circular(6.0)),
  224. ),
  225. child: Row(
  226. mainAxisSize: MainAxisSize.max,
  227. mainAxisAlignment: MainAxisAlignment.start,
  228. crossAxisAlignment: CrossAxisAlignment.center,
  229. children: [
  230. const MyAssetImage(
  231. Assets.rewardsRewardsIndex1,
  232. width: 60,
  233. height: 60,
  234. ).marginOnly(right: 15),
  235. Column(
  236. crossAxisAlignment: CrossAxisAlignment.start,
  237. children: [
  238. Text(
  239. maxLines: 1, // 设置最大行数为2
  240. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  241. 'Delibowl Group',
  242. style: TextStyle(
  243. fontSize: 15.0,
  244. color: ColorUtils.string2Color('#54638C'),
  245. fontWeight: FontWeight.w500),
  246. ).marginOnly(bottom: 8),
  247. Text(
  248. maxLines: 1, // 设置最大行数为2
  249. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  250. '#01-136, SingPost Center, 408600',
  251. style: TextStyle(
  252. fontSize: 14.0,
  253. color: ColorUtils.string2Color('#54638C'),
  254. fontWeight: FontWeight.w400),
  255. )
  256. ],
  257. ).paddingOnly(
  258. top: 5,
  259. )
  260. ],
  261. ).paddingOnly(left: 12, right: 12, bottom: 9, top: 9))
  262. .marginOnly(top: 12, bottom: 12),
  263. Row(
  264. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  265. crossAxisAlignment: CrossAxisAlignment.center,
  266. children: [
  267. Text(
  268. 'Also redeemable in 1 more location',
  269. style: TextStyle(
  270. fontSize: 15.0,
  271. color: ColorUtils.string2Color('#54638C'),
  272. fontWeight: FontWeight.w400),
  273. ),
  274. const MyAssetImage(
  275. Assets.rewardsRewardsRight,
  276. width: 12,
  277. height: 16,
  278. ),
  279. ],
  280. ),
  281. ],
  282. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  283. ),
  284. ],
  285. ).marginOnly(left: 15, bottom: 15, right: 15);
  286. }
  287. Widget _buildPackage(BuildContext context, WidgetRef ref, _vm) {
  288. return Column(
  289. children: [
  290. Container(
  291. decoration: const BoxDecoration(
  292. color: Colors.white,
  293. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  294. boxShadow: [
  295. BoxShadow(
  296. color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
  297. ],
  298. ),
  299. width: MediaQuery.of(context).size.width - 30,
  300. child: Column(
  301. crossAxisAlignment: CrossAxisAlignment.start,
  302. children: [
  303. Row(
  304. mainAxisSize: MainAxisSize.min,
  305. mainAxisAlignment: MainAxisAlignment.start,
  306. crossAxisAlignment: CrossAxisAlignment.center,
  307. children: [
  308. const MyAssetImage(
  309. Assets.rewardsRewardsDetailPackage,
  310. width: 25,
  311. height: 25,
  312. ).marginOnly(right: 10),
  313. Text(
  314. 'What’s In The Package',
  315. style: TextStyle(
  316. fontSize: 15.0,
  317. color: ColorUtils.string2Color('#000000'),
  318. fontWeight: FontWeight.w500),
  319. )
  320. ],
  321. ).marginOnly(bottom: 10),
  322. Column(
  323. crossAxisAlignment: CrossAxisAlignment.start,
  324. children: [
  325. Text(
  326. 'Cute children umbrella X1',
  327. style: TextStyle(
  328. fontSize: 15.0,
  329. color: ColorUtils.string2Color('#54638C'),
  330. fontWeight: FontWeight.w400),
  331. ),
  332. Text(
  333. 'Cute children umbrella X1',
  334. style: TextStyle(
  335. fontSize: 15.0,
  336. color: ColorUtils.string2Color('#54638C'),
  337. fontWeight: FontWeight.w400),
  338. ),
  339. Text(
  340. 'Cute children umbrella X1',
  341. style: TextStyle(
  342. fontSize: 15.0,
  343. color: ColorUtils.string2Color('#54638C'),
  344. fontWeight: FontWeight.w400),
  345. ),
  346. Text(
  347. 'Cute children umbrella X1',
  348. style: TextStyle(
  349. fontSize: 15.0,
  350. color: ColorUtils.string2Color('#54638C'),
  351. fontWeight: FontWeight.w400),
  352. ),
  353. Text(
  354. 'Cute children umbrella X1',
  355. style: TextStyle(
  356. fontSize: 15.0,
  357. color: ColorUtils.string2Color('#54638C'),
  358. fontWeight: FontWeight.w400),
  359. ),
  360. ],
  361. ),
  362. ],
  363. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  364. ),
  365. ],
  366. ).marginOnly(left: 15, bottom: 15, right: 15);
  367. }
  368. Widget _buildNotice(BuildContext context, WidgetRef ref, _vm) {
  369. return Column(
  370. children: [
  371. Container(
  372. decoration: const BoxDecoration(
  373. color: Colors.white,
  374. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  375. boxShadow: [
  376. BoxShadow(
  377. color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
  378. ],
  379. ),
  380. width: MediaQuery.of(context).size.width - 30,
  381. child: Column(
  382. crossAxisAlignment: CrossAxisAlignment.start,
  383. children: [
  384. Row(
  385. mainAxisSize: MainAxisSize.min,
  386. mainAxisAlignment: MainAxisAlignment.start,
  387. crossAxisAlignment: CrossAxisAlignment.center,
  388. children: [
  389. const MyAssetImage(
  390. Assets.rewardsRewardsDetailNotice,
  391. width: 25,
  392. height: 25,
  393. ).marginOnly(right: 10),
  394. Text(
  395. 'Redemption Notice',
  396. style: TextStyle(
  397. fontSize: 15.0,
  398. color: ColorUtils.string2Color('#000000'),
  399. fontWeight: FontWeight.w500),
  400. )
  401. ],
  402. ).marginOnly(bottom: 10),
  403. Column(
  404. crossAxisAlignment: CrossAxisAlignment.start,
  405. children: [
  406. Text(
  407. 'S1.50 booking fee is applicable for online bookingsThe voucher can be redeemed in any of Cathay Outlet inSingapore both online and offline.lf digital movie voucher is redeemed for a rated movie,Cathay Cineplexes reserves the right to restrict entry toany person who is not in compliance with the relevantrating set by lnfocommunications Media DevelopmentAuthority of Singapore (IMDA).Cathay Outlets: https://www.cathaycineplexes.com.sg/cinemas/Redemption of YY Circle Points.Mondays onlyTime: 9am to 12pm / 2pm to 6pmLocation: 60 Paya Lebar Rd, #05-43 Paya Lebar Square, Singapore 409051Phone: 6604 6896**Redemption must be made personally with physical Identification Card (NRIC) and Logged-in to the YY Circle Account**Only Local registered numbers are allowed for redemption.**Screen shot of redemption code is NOT acceptable.',
  408. style: TextStyle(
  409. fontSize: 15.0,
  410. color: ColorUtils.string2Color('#54638C'),
  411. fontWeight: FontWeight.w400),
  412. ),
  413. ],
  414. ),
  415. ],
  416. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  417. ),
  418. ],
  419. ).marginOnly(left: 15, bottom: 15, right: 15);
  420. }
  421. Widget _buildInstructions(BuildContext context, WidgetRef ref, _vm) {
  422. return Column(
  423. children: [
  424. Container(
  425. decoration: const BoxDecoration(
  426. color: Colors.white,
  427. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  428. boxShadow: [
  429. BoxShadow(
  430. color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
  431. ],
  432. ),
  433. width: MediaQuery.of(context).size.width - 30,
  434. child: Column(
  435. crossAxisAlignment: CrossAxisAlignment.start,
  436. children: [
  437. Row(
  438. mainAxisSize: MainAxisSize.min,
  439. mainAxisAlignment: MainAxisAlignment.start,
  440. crossAxisAlignment: CrossAxisAlignment.center,
  441. children: [
  442. const MyAssetImage(
  443. Assets.rewardsRewardsDetailInstructions,
  444. width: 25,
  445. height: 25,
  446. ).marginOnly(right: 10),
  447. Text(
  448. 'Redemption Instructions',
  449. style: TextStyle(
  450. fontSize: 15.0,
  451. color: ColorUtils.string2Color('#000000'),
  452. fontWeight: FontWeight.w500),
  453. )
  454. ],
  455. ).marginOnly(bottom: 10),
  456. Column(
  457. crossAxisAlignment: CrossAxisAlignment.start,
  458. children: [
  459. Text(
  460. 'Reservation not required.Present your YY Circle Voucher (it’s under “Me”tab)At the outlet.',
  461. style: TextStyle(
  462. fontSize: 15.0,
  463. color: ColorUtils.string2Color('#54638C'),
  464. fontWeight: FontWeight.w400),
  465. ),
  466. ],
  467. ),
  468. ],
  469. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  470. ),
  471. ],
  472. ).marginOnly(left: 15, bottom: 15, right: 15);
  473. }
  474. Widget _buildRedeemable(BuildContext context, WidgetRef ref, _vm) {
  475. return Column(
  476. children: [
  477. Container(
  478. decoration: const BoxDecoration(
  479. color: Colors.white,
  480. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  481. boxShadow: [
  482. BoxShadow(
  483. color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
  484. ],
  485. ),
  486. width: MediaQuery.of(context).size.width - 30,
  487. child: Column(
  488. crossAxisAlignment: CrossAxisAlignment.start,
  489. children: [
  490. Row(
  491. mainAxisSize: MainAxisSize.min,
  492. mainAxisAlignment: MainAxisAlignment.start,
  493. crossAxisAlignment: CrossAxisAlignment.center,
  494. children: [
  495. const MyAssetImage(
  496. Assets.rewardsRewardsDetailNotice,
  497. width: 25,
  498. height: 25,
  499. ).marginOnly(right: 10),
  500. Text(
  501. 'Redeemable On',
  502. style: TextStyle(
  503. fontSize: 15.0,
  504. color: ColorUtils.string2Color('#000000'),
  505. fontWeight: FontWeight.w500),
  506. )
  507. ],
  508. ).marginOnly(bottom: 10),
  509. Column(
  510. crossAxisAlignment: CrossAxisAlignment.start,
  511. children: [
  512. Text(
  513. 'Sunday: 10:00 - 22:00',
  514. style: TextStyle(
  515. fontSize: 15.0,
  516. color: ColorUtils.string2Color('#54638C'),
  517. fontWeight: FontWeight.w400),
  518. ),
  519. Text(
  520. 'Monday: 10:00 - 22:00',
  521. style: TextStyle(
  522. fontSize: 15.0,
  523. color: ColorUtils.string2Color('#54638C'),
  524. fontWeight: FontWeight.w400),
  525. ),
  526. Text(
  527. 'Tuesday: 10:00 - 22:00',
  528. style: TextStyle(
  529. fontSize: 15.0,
  530. color: ColorUtils.string2Color('#54638C'),
  531. fontWeight: FontWeight.w400),
  532. ),
  533. Text(
  534. 'Wednesday: 10:00 - 22:00',
  535. style: TextStyle(
  536. fontSize: 15.0,
  537. color: ColorUtils.string2Color('#54638C'),
  538. fontWeight: FontWeight.w400),
  539. ),
  540. Text(
  541. 'Thursday: 10:00 - 22:00',
  542. style: TextStyle(
  543. fontSize: 15.0,
  544. color: ColorUtils.string2Color('#54638C'),
  545. fontWeight: FontWeight.w400),
  546. ),
  547. Text(
  548. 'Friday: 10:00 - 22:00',
  549. style: TextStyle(
  550. fontSize: 15.0,
  551. color: ColorUtils.string2Color('#54638C'),
  552. fontWeight: FontWeight.w400),
  553. ),
  554. ],
  555. ),
  556. ],
  557. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  558. ),
  559. ],
  560. ).marginOnly(left: 15, bottom: 15, right: 15);
  561. }
  562. @override
  563. Widget build(BuildContext context, WidgetRef ref) {
  564. final _vm = ref.read(rewardsDetailVmProvider.notifier);
  565. final state = ref.watch(rewardsDetailVmProvider);
  566. useEffect(() {
  567. // 组件挂载时执行 - 执行接口请求
  568. Future.microtask(() => _vm.initPageData(id:id));
  569. return () {
  570. // 组件卸载时执行
  571. Log.d("property_news_page 组件卸载时执行");
  572. };
  573. }, []);
  574. return Scaffold(
  575. appBar: MyAppBar.appBar(
  576. context,
  577. "Verification Detail",
  578. backgroundColor: context.appColors.whiteBG,
  579. ),
  580. body: LoadStateLayout(
  581. state: state.loadingState,
  582. errorMessage: state.errorMessage,
  583. errorRetry: () {
  584. _vm.retryRequest(id: id);
  585. },
  586. successWidget: Column(
  587. children: [
  588. Expanded(
  589. child:
  590. SingleChildScrollView(
  591. scrollDirection: Axis.vertical,
  592. physics: const BouncingScrollPhysics(),
  593. clipBehavior: Clip.none,
  594. child: Column(
  595. children: [
  596. Container(
  597. color: ColorUtils.string2Color('#F2F3F6'),
  598. padding: const EdgeInsets.only(top: 15),
  599. child: Column(
  600. children: [
  601. _buildSaleItem(context, ref, _vm),
  602. _buildDeal(context, ref, _vm),
  603. _buildPackage(context, ref, _vm),
  604. _buildNotice(context, ref, _vm),
  605. _buildInstructions(context, ref, _vm),
  606. _buildRedeemable(context, ref, _vm),
  607. ],
  608. )),
  609. ],
  610. ))),
  611. Container(
  612. height: 50,
  613. color: ColorUtils.string2Color('#4161D0'),
  614. child: Flex(
  615. direction: Axis.horizontal,
  616. children: [
  617. Expanded(
  618. flex: 1,
  619. child: Container(
  620. color: ColorUtils.string2Color('#4161D0'),
  621. height: 100,
  622. child: Row(
  623. mainAxisAlignment: MainAxisAlignment.center,
  624. crossAxisAlignment: CrossAxisAlignment.center,
  625. children: [
  626. MyTextView(
  627. "Redeem",
  628. fontSize: 16,
  629. textColor: Colors.white,
  630. isFontMedium: true,
  631. ),
  632. ],
  633. ),
  634. ).onTap(() {
  635. RewardsConfirmPage.startInstance();
  636. }),
  637. ),
  638. ],
  639. ),
  640. )
  641. ],
  642. )),
  643. );
  644. }
  645. }