member_retain_dialog.dart 4.0 KB

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