member_retain_dialog.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import 'dart:io';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  5. import 'package:location/resource/assets.gen.dart';
  6. import 'package:location/resource/string.gen.dart';
  7. class MemberRetainDialog {
  8. static final String _tag = 'MemberRetainDialog';
  9. static void show(
  10. {required VoidCallback payClick,
  11. bool isShowRecommendView = true,
  12. required VoidCallback cancelClick}) {
  13. SmartDialog.show(
  14. tag: _tag,
  15. backDismiss: false,
  16. keepSingle: true,
  17. clickMaskDismiss: false,
  18. builder: (_) {
  19. return _MemberRetainDialogWidget(
  20. payClick: payClick,
  21. isShowRecommendView: isShowRecommendView,
  22. cancelClick: cancelClick);
  23. });
  24. }
  25. static void dismiss() {
  26. SmartDialog.dismiss(tag: _tag);
  27. }
  28. }
  29. class _MemberRetainDialogWidget extends Dialog {
  30. final VoidCallback payClick;
  31. final VoidCallback cancelClick;
  32. final bool isShowRecommendView;
  33. const _MemberRetainDialogWidget(
  34. {required this.payClick,
  35. required this.isShowRecommendView,
  36. required this.cancelClick});
  37. @override
  38. Widget build(BuildContext context) {
  39. return IntrinsicHeight(
  40. child: Column(
  41. children: [
  42. Stack(
  43. children: [
  44. Visibility(
  45. visible: isShowRecommendView,
  46. child: Positioned(
  47. top: 0,
  48. left: 10.w,
  49. child: SizedBox(
  50. width: 300.w,
  51. child: AspectRatio(
  52. aspectRatio: 987 / 543,
  53. child: Assets.images.imgMemberRetainHeader.image()),
  54. ),
  55. ),
  56. ),
  57. Column(
  58. children: [
  59. SizedBox(height: 110.w),
  60. SizedBox(
  61. width: 294.w,
  62. child: AspectRatio(
  63. aspectRatio: 882 / 966,
  64. child: Assets.images.imgMemberRetainContainer.image()),
  65. )
  66. ],
  67. ),
  68. Positioned(
  69. bottom: 22.w,
  70. left: 36.w,
  71. right: 36.w,
  72. child: GestureDetector(
  73. onTap: () {
  74. MemberRetainDialog.dismiss();
  75. payClick();
  76. },
  77. child: Container(
  78. height: 40.w,
  79. decoration: BoxDecoration(
  80. gradient: LinearGradient(
  81. begin: Alignment.centerLeft, // 90度相当于从左到右
  82. end: Alignment.centerRight,
  83. colors: [
  84. Color(0xFF7B7DFF), // #7B7DFF
  85. Color(0xFF6365FF), // #6365FF
  86. ],
  87. stops: [0.0, 1.0],
  88. // 从0%到100%
  89. ),
  90. borderRadius: BorderRadius.circular(40.w / 2.0),
  91. ),
  92. //getPrimaryBtnDecoration(100.w),
  93. child: Center(
  94. child: Text(
  95. isShowRecommendView
  96. ? StringName.memberContinuePay
  97. : StringName.memberContinuePayIos,
  98. style:
  99. TextStyle(fontSize: 15.sp, color: Colors.white)),
  100. ),
  101. ),
  102. ),
  103. )
  104. ],
  105. ),
  106. SizedBox(
  107. height: 24.w,
  108. ),
  109. Center(
  110. child: GestureDetector(
  111. onTap: () {
  112. MemberRetainDialog.dismiss();
  113. cancelClick();
  114. },
  115. child: Assets.images.iconMemberRetainClose
  116. .image(width: 32.w, height: 32.w),
  117. ),
  118. )
  119. ],
  120. ),
  121. );
  122. }
  123. }