common_confirm_dialog.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  4. import 'package:location/resource/assets.gen.dart';
  5. import 'package:location/utils/common_style.dart';
  6. class CommonConfirmDialog {
  7. static const String _tag = "CommonConfirmDialog";
  8. static void show(
  9. {required Widget titleWidget,
  10. required Widget descWidget,
  11. required String confirmText,
  12. String? cancelText,
  13. VoidCallback? cancelOnTap,
  14. VoidCallback? onDismiss,
  15. bool? clickMaskDismiss,
  16. bool? backDismiss,
  17. required VoidCallback confirmOnTap,
  18. String tag = _tag}) {
  19. SmartDialog.show(
  20. tag: _tag,
  21. backDismiss: backDismiss,
  22. clickMaskDismiss: clickMaskDismiss,
  23. onDismiss: onDismiss,
  24. builder: (_) {
  25. return CommonConfirmView(
  26. titleWidget: titleWidget,
  27. descWidget: descWidget,
  28. confirmText: confirmText,
  29. cancelText: cancelText,
  30. cancelOnTap: () {
  31. CommonConfirmDialog.dismiss(tag: tag);
  32. cancelOnTap?.call();
  33. },
  34. confirmOnTap: () {
  35. CommonConfirmDialog.dismiss(tag: tag);
  36. confirmOnTap();
  37. });
  38. });
  39. }
  40. static void dismiss({String tag = _tag}) {
  41. SmartDialog.dismiss(tag: _tag);
  42. }
  43. }
  44. class CommonConfirmView extends Dialog {
  45. final Widget titleWidget;
  46. final Widget descWidget;
  47. final String confirmText;
  48. final String? cancelText;
  49. final VoidCallback? cancelOnTap;
  50. final VoidCallback confirmOnTap;
  51. const CommonConfirmView({
  52. super.key,
  53. required this.titleWidget,
  54. required this.descWidget,
  55. required this.confirmText,
  56. this.cancelOnTap,
  57. this.cancelText,
  58. required this.confirmOnTap,
  59. });
  60. @override
  61. Widget build(BuildContext context) {
  62. return Container(
  63. width: 300.w,
  64. decoration: BoxDecoration(
  65. color: Colors.white,
  66. borderRadius: BorderRadius.circular(20.w),
  67. ),
  68. child: IntrinsicHeight(
  69. child: Stack(
  70. children: [
  71. Center(
  72. child: Column(
  73. children: [
  74. SizedBox(height: 27.w),
  75. titleWidget,
  76. SizedBox(height: 15.w),
  77. Container(
  78. margin: EdgeInsets.symmetric(horizontal: 28.w),
  79. child: descWidget,
  80. ),
  81. SizedBox(height: 31.w),
  82. GestureDetector(
  83. onTap: () {
  84. confirmOnTap();
  85. },
  86. child: Container(
  87. width: 229.w,
  88. height: 43.w,
  89. decoration: getPrimaryBtnDecoration(46.w),
  90. child: Center(
  91. child: Text(confirmText,
  92. style: TextStyle(
  93. fontSize: 14.sp, color: Colors.white)))),
  94. ),
  95. SizedBox(height: 20.w),
  96. ],
  97. ),
  98. ),
  99. Positioned(
  100. top: 12.w,
  101. right: 12.w,
  102. child: GestureDetector(
  103. onTap: () {
  104. cancelOnTap?.call();
  105. },
  106. child: Assets.images.iconDialogClose
  107. .image(width: 20.w, height: 20.w)))
  108. ],
  109. ),
  110. ),
  111. );
  112. }
  113. }