common_confirm_dialog.dart 3.2 KB

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