rewards_detail_page.dart 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579
  1. import 'package:cpt_rewards/modules/rewards_confirm/rewards_confirm_page.dart';
  2. import 'package:cs_resources/generated/l10n.dart';
  3. import 'package:cs_resources/theme/app_colors_theme.dart';
  4. import 'package:domain/entity/rewards_detail_entity.dart';
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:auto_route/auto_route.dart';
  8. import 'package:flutter_hooks/flutter_hooks.dart';
  9. import 'package:hooks_riverpod/hooks_riverpod.dart';
  10. import 'package:router/ext/auto_router_extensions.dart';
  11. import 'package:shared/utils/log_utils.dart';
  12. import 'package:shared/utils/color_utils.dart';
  13. import 'package:widgets/ext/ex_widget.dart';
  14. import 'package:widgets/load_state_layout.dart';
  15. import 'package:widgets/my_appbar.dart';
  16. import 'package:widgets/my_load_image.dart';
  17. import 'package:widgets/my_text_view.dart';
  18. import 'package:widgets/shatter/picker_container.dart';
  19. import 'package:widgets/utils/dark_theme_util.dart';
  20. import 'package:widgets/widget_export.dart';
  21. import 'package:cs_resources/generated/assets.dart';
  22. import '../../../router/page/rewards_page_router.dart';
  23. import './rewards_detail_vm.dart';
  24. @RoutePage()
  25. class RewardsDetailPage extends HookConsumerWidget {
  26. final int? id;
  27. const RewardsDetailPage({Key? key, @PathParam('id') required this.id}) : super(key: key);
  28. //启动当前页面
  29. static void startInstance({
  30. BuildContext? context,
  31. int? id,
  32. }) {
  33. if (context != null) {
  34. context.router.push(RewardsDetailPageRoute(id: id));
  35. } else {
  36. appRouter.push(RewardsDetailPageRoute(id: id));
  37. }
  38. }
  39. // listitem
  40. Widget _buildSaleItem(BuildContext context, WidgetRef ref, _vm, detailInfo) {
  41. String title = detailInfo!.title ?? "";
  42. String createdAt = detailInfo.createdAt ?? "";
  43. List? resources = detailInfo!.resources ?? [];
  44. int point = detailInfo.point ?? 0;
  45. int originalPoint = detailInfo.originalPoint ?? 0;
  46. String description = detailInfo.description ?? "";
  47. bool reservation = detailInfo!.reservation;
  48. String redeemedStart = detailInfo.redeemedStart ?? "";
  49. String redeemedEnd = detailInfo.redeemedEnd ?? "";
  50. String redeemedDate = '$redeemedStart-$redeemedEnd';
  51. return Column(
  52. children: [
  53. Container(
  54. decoration: BoxDecoration(
  55. color: context.appColors.whiteBG,
  56. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  57. boxShadow: [BoxShadow(color: context.appColors.itemBGShadow)],
  58. ),
  59. width: MediaQuery.of(context).size.width - 30,
  60. // height: 420,
  61. // margin: const EdgeInsets.only(left: 15, right: 15, top: 12.5),
  62. child: Column(
  63. children: [
  64. resources!.length > 0
  65. ? MyLoadImage(
  66. resources[0] ?? '',
  67. width: MediaQuery.of(context).size.width,
  68. height: 150,
  69. )
  70. : Container(),
  71. Column(
  72. crossAxisAlignment: CrossAxisAlignment.start,
  73. mainAxisAlignment: MainAxisAlignment.start,
  74. children: [
  75. Text(
  76. maxLines: 1, // 设置最大行数为2
  77. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  78. title,
  79. style: TextStyle(fontSize: 16.0, color: context.appColors.textBlack, fontWeight: FontWeight.w500),
  80. ),
  81. Text(
  82. maxLines: 1, // 设置最大行数为2
  83. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  84. '${S.current.published_date}: $createdAt',
  85. style: TextStyle(
  86. fontSize: 13.0,
  87. color: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#808DAF'), darkColor: Colors.white),
  88. fontWeight: FontWeight.w400),
  89. ).marginOnly(bottom: 5),
  90. Row(
  91. children: [
  92. Text(
  93. '$point',
  94. style: TextStyle(fontSize: 19.0, color: context.appColors.textBlack, fontWeight: FontWeight.w500),
  95. ),
  96. Text(
  97. '$originalPoint',
  98. style: TextStyle(
  99. decoration: TextDecoration.lineThrough,
  100. decorationColor: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#808DAF'), darkColor: Colors.white),
  101. decorationStyle: TextDecorationStyle.solid,
  102. fontSize: 12.0,
  103. color: ColorUtils.string2Color('#808DAF'),
  104. fontWeight: FontWeight.w400),
  105. ).marginOnly(left: 5, right: 5),
  106. Text(
  107. S.current.points,
  108. style: TextStyle(fontSize: 13.0, color: context.appColors.textBlack, fontWeight: FontWeight.w400),
  109. ),
  110. ],
  111. ),
  112. Text(
  113. description,
  114. style: TextStyle(
  115. fontSize: 13.0,
  116. color: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#808DAF'), darkColor: Colors.white),
  117. fontWeight: FontWeight.w400),
  118. ).marginOnly(bottom: 10, top: 10),
  119. Container(
  120. height: 68,
  121. decoration: BoxDecoration(
  122. color: ColorUtils.string2Color('#F2F3F6'),
  123. borderRadius:
  124. const BorderRadius.all(Radius.circular(6.0)),
  125. ),
  126. child: Column(
  127. children: [
  128. Row(
  129. mainAxisSize: MainAxisSize.min,
  130. mainAxisAlignment: MainAxisAlignment.start,
  131. crossAxisAlignment: CrossAxisAlignment.center,
  132. children: [
  133. MyAssetImage(
  134. Assets.rewardsRewardsDetailDay,
  135. width: 25,
  136. height: 25,
  137. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  138. ).marginOnly(right: 5),
  139. Text(
  140. maxLines: 1, // 设置最大行数为2
  141. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  142. '$redeemedStart',
  143. style: TextStyle(
  144. fontSize: 14.0,
  145. color: ColorUtils.string2Color('#808DAF'),
  146. fontWeight: FontWeight.w400),
  147. )
  148. ],
  149. ).paddingOnly(left: 7, right: 12),
  150. Text(
  151. maxLines: 1, // 设置最大行数为2
  152. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  153. '|',
  154. style: TextStyle(
  155. fontSize: 14.0,
  156. color: ColorUtils.string2Color('#808DAF'),
  157. fontWeight: FontWeight.w400),
  158. ),
  159. Text(
  160. maxLines: 1, // 设置最大行数为2
  161. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  162. '$redeemedEnd',
  163. style: TextStyle(
  164. fontSize: 14.0,
  165. color: ColorUtils.string2Color('#808DAF'),
  166. fontWeight: FontWeight.w400),
  167. ).marginOnly(left: 30)
  168. ],
  169. )),
  170. Container(
  171. height: 28,
  172. decoration: BoxDecoration(
  173. color: ColorUtils.string2Color('#F2F3F6'),
  174. borderRadius: const BorderRadius.all(Radius.circular(6.0)),
  175. ),
  176. child: Row(
  177. mainAxisSize: MainAxisSize.min,
  178. mainAxisAlignment: MainAxisAlignment.start,
  179. crossAxisAlignment: CrossAxisAlignment.center,
  180. children: [
  181. MyAssetImage(
  182. Assets.rewardsRewardsDetailRequired,
  183. width: 25,
  184. height: 25,
  185. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  186. ).marginOnly(right: 5),
  187. Text(
  188. maxLines: 1, // 设置最大行数为2
  189. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  190. reservation ? S.current.reservation_required : S.current.no_reservation_required,
  191. style: TextStyle(
  192. fontSize: 14.0,
  193. color: ColorUtils.string2Color('#808DAF'),
  194. fontWeight: FontWeight.w400),
  195. )
  196. ],
  197. ).paddingOnly(left: 7, right: 12))
  198. .marginOnly(top: 8, bottom: 25)
  199. ],
  200. ).paddingOnly(left: 15, right: 15, top: 10),
  201. ],
  202. )),
  203. ],
  204. ).marginOnly(left: 15, bottom: 15, right: 15);
  205. }
  206. Widget _buildDeal(BuildContext context, WidgetRef ref, _vm) {
  207. return Column(
  208. children: [
  209. Container(
  210. decoration: const BoxDecoration(
  211. color: Colors.white,
  212. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  213. boxShadow: [BoxShadow(color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)],
  214. ),
  215. width: MediaQuery.of(context).size.width - 30,
  216. child: Column(
  217. crossAxisAlignment: CrossAxisAlignment.start,
  218. children: [
  219. Row(
  220. mainAxisSize: MainAxisSize.min,
  221. mainAxisAlignment: MainAxisAlignment.start,
  222. crossAxisAlignment: CrossAxisAlignment.center,
  223. children: [
  224. MyAssetImage(
  225. Assets.rewardsRewardsDetailDeal,
  226. width: 25,
  227. height: 25,
  228. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  229. ).marginOnly(right: 10),
  230. Text(
  231. S.current.redeem_deal_at,
  232. style: TextStyle(fontSize: 15.0, color: context.appColors.textBlack , fontWeight: FontWeight.w500),
  233. )
  234. ],
  235. ),
  236. Container(
  237. height: 77,
  238. decoration: BoxDecoration(
  239. color:DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#F2F3F6'),darkColor: Colors.white),
  240. borderRadius: const BorderRadius.all(Radius.circular(6.0)),
  241. ),
  242. child: Row(
  243. mainAxisSize: MainAxisSize.max,
  244. mainAxisAlignment: MainAxisAlignment.start,
  245. crossAxisAlignment: CrossAxisAlignment.center,
  246. children: [
  247. MyAssetImage(
  248. Assets.rewardsRewardsIndex1,
  249. width: 60,
  250. height: 60,
  251. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  252. ).marginOnly(right: 15),
  253. Column(
  254. crossAxisAlignment: CrossAxisAlignment.start,
  255. children: [
  256. Text(
  257. maxLines: 1, // 设置最大行数为2
  258. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  259. 'Delibowl Group',
  260. style: TextStyle(fontSize: 15.0, color: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#54638C'),darkColor: Colors.white), fontWeight: FontWeight.w500),
  261. ).marginOnly(bottom: 8),
  262. Text(
  263. maxLines: 1, // 设置最大行数为2
  264. overflow: TextOverflow.ellipsis, // 超出部分用省略号表示
  265. '#01-136, SingPost Center, 408600',
  266. style: TextStyle(fontSize: 14.0, color: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#54638C'),darkColor: Colors.white), fontWeight: FontWeight.w400),
  267. )
  268. ],
  269. ).paddingOnly(
  270. top: 5,
  271. )
  272. ],
  273. ).paddingOnly(left: 12, right: 12, bottom: 9, top: 9))
  274. .marginOnly(top: 12, bottom: 12),
  275. Row(
  276. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  277. crossAxisAlignment: CrossAxisAlignment.center,
  278. children: [
  279. Text(
  280. 'Also redeemable in 1 more location',
  281. style: TextStyle(fontSize: 15.0, color:DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#54638C'),darkColor: Colors.white), fontWeight: FontWeight.w400),
  282. ),
  283. MyAssetImage(
  284. Assets.rewardsRewardsRight,
  285. width: 12,
  286. height: 16,
  287. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  288. ),
  289. ],
  290. ),
  291. ],
  292. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  293. ),
  294. ],
  295. ).marginOnly(left: 15, bottom: 15, right: 15);
  296. }
  297. Widget _buildPackage(BuildContext context, WidgetRef ref, _vm, detailInfo) {
  298. String package = detailInfo.package ?? "";
  299. return Column(
  300. children: [
  301. Container(
  302. decoration: BoxDecoration(
  303. color:context.appColors.whiteBG ,
  304. borderRadius: const BorderRadius.all(Radius.circular(6.0)),
  305. boxShadow: [BoxShadow(color: context.appColors.itemBGShadow )],
  306. ),
  307. width: MediaQuery.of(context).size.width - 30,
  308. child: Column(
  309. crossAxisAlignment: CrossAxisAlignment.start,
  310. children: [
  311. Row(
  312. mainAxisSize: MainAxisSize.min,
  313. mainAxisAlignment: MainAxisAlignment.start,
  314. crossAxisAlignment: CrossAxisAlignment.center,
  315. children: [
  316. MyAssetImage(
  317. Assets.rewardsRewardsDetailPackage,
  318. width: 25,
  319. height: 25,
  320. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  321. ).marginOnly(right: 10),
  322. Text(
  323. 'What’s In The Package',
  324. style: TextStyle(fontSize: 15.0, color: context.appColors.textBlack , fontWeight: FontWeight.w500),
  325. )
  326. ],
  327. ).marginOnly(bottom: 10),
  328. Column(
  329. crossAxisAlignment: CrossAxisAlignment.start,
  330. children: [
  331. Text(
  332. package,
  333. style: TextStyle(fontSize: 15.0, color: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#54638C'),darkColor: Colors.white), fontWeight: FontWeight.w400),
  334. ),
  335. ],
  336. ),
  337. ],
  338. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  339. ),
  340. ],
  341. ).marginOnly(left: 15, bottom: 15, right: 15);
  342. }
  343. Widget _buildNotice(BuildContext context, WidgetRef ref, _vm, detailInfo) {
  344. String notice = detailInfo.notice ?? "";
  345. return Column(
  346. children: [
  347. Container(
  348. decoration: BoxDecoration(
  349. color:context.appColors.whiteBG ,
  350. borderRadius: const BorderRadius.all(Radius.circular(6.0)),
  351. boxShadow: [BoxShadow(color: context.appColors.itemBGShadow )],
  352. ),
  353. width: MediaQuery.of(context).size.width - 30,
  354. child: Column(
  355. crossAxisAlignment: CrossAxisAlignment.start,
  356. children: [
  357. Row(
  358. mainAxisSize: MainAxisSize.min,
  359. mainAxisAlignment: MainAxisAlignment.start,
  360. crossAxisAlignment: CrossAxisAlignment.center,
  361. children: [
  362. MyAssetImage(
  363. Assets.rewardsRewardsDetailNotice,
  364. width: 25,
  365. height: 25,
  366. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  367. ).marginOnly(right: 10),
  368. Text(
  369. S.current.redemption_notice,
  370. style: TextStyle(fontSize: 15.0, color: context.appColors.textBlack , fontWeight: FontWeight.w500),
  371. )
  372. ],
  373. ).marginOnly(bottom: 10),
  374. Column(
  375. crossAxisAlignment: CrossAxisAlignment.start,
  376. children: [
  377. Text(
  378. notice,
  379. style: TextStyle(fontSize: 15.0, color:DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#54638C'),darkColor: Colors.white), fontWeight: FontWeight.w400),
  380. ),
  381. ],
  382. ),
  383. ],
  384. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  385. ),
  386. ],
  387. ).marginOnly(left: 15, bottom: 15, right: 15);
  388. }
  389. Widget _buildInstructions(BuildContext context, WidgetRef ref, _vm) {
  390. return Column(
  391. children: [
  392. Container(
  393. decoration: BoxDecoration(
  394. color: context.appColors.whiteBG ,
  395. borderRadius: BorderRadius.all(Radius.circular(6.0)),
  396. boxShadow: [BoxShadow(color: context.appColors.itemBGShadow)],
  397. ),
  398. width: MediaQuery.of(context).size.width - 30,
  399. child: Column(
  400. crossAxisAlignment: CrossAxisAlignment.start,
  401. children: [
  402. Row(
  403. mainAxisSize: MainAxisSize.min,
  404. mainAxisAlignment: MainAxisAlignment.start,
  405. crossAxisAlignment: CrossAxisAlignment.center,
  406. children: [
  407. MyAssetImage(
  408. Assets.rewardsRewardsDetailInstructions,
  409. width: 25,
  410. height: 25,
  411. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  412. ).marginOnly(right: 10),
  413. Text(
  414. S.current.redemption_instructions,
  415. style: TextStyle(fontSize: 15.0, color: context.appColors.textBlack , fontWeight: FontWeight.w500),
  416. )
  417. ],
  418. ).marginOnly(bottom: 10),
  419. Column(
  420. crossAxisAlignment: CrossAxisAlignment.start,
  421. children: [
  422. Text(
  423. S.current.redemption_reservation_txt,
  424. style: TextStyle(fontSize: 15.0, color: DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#54638C'),darkColor: Colors.white), fontWeight: FontWeight.w400),
  425. ),
  426. ],
  427. ),
  428. ],
  429. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  430. ),
  431. ],
  432. ).marginOnly(left: 15, bottom: 15, right: 15);
  433. }
  434. Widget _buildRedeemable(BuildContext context, WidgetRef ref, _vm, detailInfo) {
  435. List? redeemable = detailInfo!.redeemable ?? [];
  436. return Column(
  437. children: [
  438. Container(
  439. decoration: BoxDecoration(
  440. color: context.appColors.whiteBG ,
  441. borderRadius: const BorderRadius.all(Radius.circular(6.0)),
  442. boxShadow: [BoxShadow(color: context.appColors.itemBGShadow )],
  443. ),
  444. width: MediaQuery.of(context).size.width - 30,
  445. child: Column(
  446. crossAxisAlignment: CrossAxisAlignment.start,
  447. children: [
  448. Row(
  449. mainAxisSize: MainAxisSize.min,
  450. mainAxisAlignment: MainAxisAlignment.start,
  451. crossAxisAlignment: CrossAxisAlignment.center,
  452. children: [
  453. MyAssetImage(
  454. Assets.rewardsRewardsDetailNotice,
  455. width: 25,
  456. height: 25,
  457. color: DarkThemeUtil.multiColors(context, AppColorsTheme.colorPrimary, darkColor: Colors.white),
  458. ).marginOnly(right: 10),
  459. Text(
  460. S.current.redeemable_on,
  461. style: TextStyle(fontSize: 15.0, color: context.appColors.textBlack , fontWeight: FontWeight.w500),
  462. )
  463. ],
  464. ).marginOnly(bottom: 10),
  465. Column(
  466. crossAxisAlignment: CrossAxisAlignment.start,
  467. children: List.generate(
  468. redeemable!.length,
  469. (index) {
  470. final item = redeemable[index];
  471. return Text(
  472. '${item.day}: ${item.time}',
  473. style: TextStyle(fontSize: 15.0, color:DarkThemeUtil.multiColors(context, ColorUtils.string2Color('#54638C'),darkColor: Colors.white), fontWeight: FontWeight.w400),
  474. );
  475. },
  476. ),
  477. ),
  478. ],
  479. ).paddingOnly(left: 15, right: 15, top: 12, bottom: 20),
  480. ),
  481. ],
  482. ).marginOnly(left: 15, bottom: 15, right: 15);
  483. }
  484. @override
  485. Widget build(BuildContext context, WidgetRef ref) {
  486. final _vm = ref.read(rewardsDetailVmProvider.notifier);
  487. final state = ref.watch(rewardsDetailVmProvider);
  488. RewardsDetailEntity? detailInfo = state.detailInfo;
  489. useEffect(() {
  490. // 组件挂载时执行 - 执行接口请求
  491. Future.microtask(() => _vm.initPageData(id: id));
  492. return () {
  493. // 组件卸载时执行
  494. Log.d("property_news_page 组件卸载时执行");
  495. };
  496. }, []);
  497. return Scaffold(
  498. appBar: MyAppBar.appBar(
  499. context,
  500. S.current.detail,
  501. backgroundColor: context.appColors.whiteBG,
  502. ),
  503. body: LoadStateLayout(
  504. state: state.loadingState,
  505. errorMessage: state.errorMessage,
  506. errorRetry: () {
  507. _vm.retryRequest(id: id);
  508. },
  509. successWidget: Column(
  510. children: [
  511. Expanded(
  512. child: SingleChildScrollView(
  513. scrollDirection: Axis.vertical,
  514. physics: const BouncingScrollPhysics(),
  515. clipBehavior: Clip.none,
  516. child: Column(
  517. children: [
  518. Container(
  519. color: context.appColors.backgroundDark,
  520. padding: const EdgeInsets.only(top: 15),
  521. child: Column(
  522. children: [
  523. _buildSaleItem(context, ref, _vm, detailInfo),
  524. // _buildDeal(context, ref, _vm),
  525. _buildPackage(context, ref, _vm, detailInfo),
  526. _buildNotice(context, ref, _vm, detailInfo),
  527. // _buildInstructions(context, ref, _vm),
  528. _buildRedeemable(context, ref, _vm, detailInfo),
  529. ],
  530. )),
  531. ],
  532. ))),
  533. Container(
  534. height: 50,
  535. color: context.appColors.btnBgDefault,
  536. child: Flex(
  537. direction: Axis.horizontal,
  538. children: [
  539. Expanded(
  540. flex: 1,
  541. child: Container(
  542. color: context.appColors.btnBgDefault,
  543. height: 100,
  544. child: Row(
  545. mainAxisAlignment: MainAxisAlignment.center,
  546. crossAxisAlignment: CrossAxisAlignment.center,
  547. children: [
  548. MyTextView(
  549. S.current.redeem,
  550. fontSize: 16,
  551. textColor: Colors.white,
  552. isFontMedium: true,
  553. ),
  554. ],
  555. ),
  556. ).onTap(() {
  557. RewardsConfirmPage.startInstance(id: detailInfo?.id);
  558. }),
  559. ),
  560. ],
  561. ),
  562. )
  563. ],
  564. )),
  565. );
  566. }
  567. }