common_confirm_dialog.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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 _CommonConfirmDialog(
  26. titleWidget: titleWidget,
  27. descWidget: descWidget,
  28. confirmText: confirmText,
  29. cancelText: cancelText,
  30. cancelOnTap: cancelOnTap,
  31. confirmOnTap: confirmOnTap);
  32. });
  33. }
  34. static void dismiss({String tag = _tag}) {
  35. SmartDialog.dismiss(tag: _tag);
  36. }
  37. }
  38. class _CommonConfirmDialog extends Dialog {
  39. final Widget titleWidget;
  40. final Widget descWidget;
  41. final String confirmText;
  42. final String? cancelText;
  43. final VoidCallback? cancelOnTap;
  44. final VoidCallback confirmOnTap;
  45. const _CommonConfirmDialog({
  46. required this.titleWidget,
  47. required this.descWidget,
  48. required this.confirmText,
  49. this.cancelOnTap,
  50. this.cancelText,
  51. required this.confirmOnTap,
  52. });
  53. @override
  54. Widget build(BuildContext context) {
  55. return Container(
  56. width: 300.w,
  57. decoration: BoxDecoration(
  58. color: Colors.white,
  59. borderRadius: BorderRadius.circular(20.w),
  60. ),
  61. child: IntrinsicHeight(
  62. child: Stack(
  63. children: [
  64. Center(
  65. child: Column(
  66. children: [
  67. SizedBox(height: 27.w),
  68. titleWidget,
  69. SizedBox(height: 15.w),
  70. Container(
  71. margin: EdgeInsets.symmetric(horizontal: 28.w),
  72. child: descWidget,
  73. ),
  74. SizedBox(height: 31.w),
  75. GestureDetector(
  76. onTap: () {
  77. CommonConfirmDialog.dismiss();
  78. confirmOnTap();
  79. },
  80. child: Container(
  81. width: 229.w,
  82. height: 43.w,
  83. decoration: getPrimaryBtnDecoration(46.w),
  84. child: Center(
  85. child: Text(confirmText,
  86. style: TextStyle(
  87. fontSize: 14.sp, color: Colors.white)))),
  88. ),
  89. SizedBox(height: 20.w),
  90. ],
  91. ),
  92. ),
  93. Positioned(
  94. top: 12.w,
  95. right: 12.w,
  96. child: GestureDetector(
  97. onTap: () {
  98. CommonConfirmDialog.dismiss();
  99. cancelOnTap?.call();
  100. },
  101. child: Assets.images.iconDialogClose
  102. .image(width: 20.w, height: 20.w)))
  103. ],
  104. ),
  105. ),
  106. );
  107. }
  108. }