common_confirm_dialog.dart 3.1 KB

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