diff --git a/CHANGELOG.md b/CHANGELOG.md
index e6a5c6c..4d06afa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
 # [4.9.1]
 * fix [#132](https://github.com/fluttercandies/flutter_smart_dialog/issues/132)
+* optimize nonAnimationTypes
+* toast add some param
 
 # [4.9.0]
 * Breaking Change
diff --git a/lib/src/compatible/compatible_smart_dialog.dart b/lib/src/compatible/compatible_smart_dialog.dart
index 541225b..894dee3 100644
--- a/lib/src/compatible/compatible_smart_dialog.dart
+++ b/lib/src/compatible/compatible_smart_dialog.dart
@@ -11,7 +11,8 @@ class CompatibleSmartDialog {
   factory CompatibleSmartDialog() => instance;
   static CompatibleSmartDialog? _instance;
 
-  static CompatibleSmartDialog get instance => _instance ??= CompatibleSmartDialog._();
+  static CompatibleSmartDialog get instance =>
+      _instance ??= CompatibleSmartDialog._();
 
   CompatibleSmartDialog._();
 
@@ -281,7 +282,9 @@ class CompatibleSmartDialog {
       widget: widget,
       alignment: alignmentTemp ?? Alignment.bottomCenter,
       clickMaskDismiss: clickBgDismissTemp ?? config.clickBgDismiss,
-      animationType: isLoadingTemp ?? false ? SmartAnimationType.fade : SmartAnimationType.scale,
+      animationType: isLoadingTemp ?? false
+          ? SmartAnimationType.fade
+          : SmartAnimationType.scale,
       nonAnimationTypes: const [],
       animationBuilder: null,
       scalePointBuilder: null,
@@ -291,9 +294,10 @@ class CompatibleSmartDialog {
       maskColor: maskColorTemp ?? config.maskColor,
       maskWidget: maskWidgetTemp ?? config.maskWidget,
       debounce: debounceTemp ?? config.debounce,
-      highlightBuilder: highlightBuilder ?? (Offset targetOffset, Size targetSize) {
-              return highlight ?? Positioned(child: Container());
-            },
+      highlightBuilder: highlightBuilder ??
+          (Offset targetOffset, Size targetSize) {
+            return highlight ?? Positioned(child: Container());
+          },
       onDismiss: onDismiss,
       onMask: null,
       displayTime: null,
@@ -378,7 +382,9 @@ class CompatibleSmartDialog {
     return DialogProxy.instance.showLoading(
       alignment: Alignment.center,
       clickMaskDismiss: clickBgDismissTemp ?? false,
-      animationType: isLoadingTemp ?? true ? SmartAnimationType.fade : SmartAnimationType.scale,
+      animationType: isLoadingTemp ?? true
+          ? SmartAnimationType.fade
+          : SmartAnimationType.scale,
       nonAnimationTypes: const [],
       animationBuilder: null,
       usePenetrate: isPenetrateTemp ?? false,
@@ -478,7 +484,10 @@ class CompatibleSmartDialog {
     return DialogProxy.instance.showToast(
       alignment: Alignment.bottomCenter,
       clickMaskDismiss: clickBgDismissTemp ?? false,
-      animationType: isLoadingTemp ?? true ? SmartAnimationType.fade : SmartAnimationType.scale,
+      animationType: isLoadingTemp ?? true
+          ? SmartAnimationType.fade
+          : SmartAnimationType.scale,
+      nonAnimationTypes: const [],
       animationBuilder: null,
       usePenetrate: isPenetrateTemp ?? true,
       useAnimation: isUseAnimationTemp ?? true,
@@ -486,6 +495,8 @@ class CompatibleSmartDialog {
       maskColor: maskColorTemp ?? config.maskColor,
       maskWidget: maskWidgetTemp ?? config.maskWidget,
       consumeEvent: consumeEvent ?? false,
+      onMask: null,
+      onDismiss: null,
       displayTime: time ?? const Duration(milliseconds: 2000),
       debounce: debounceTemp ?? config.debounce,
       displayType: type ?? SmartToastType.normal,
diff --git a/lib/src/config/smart_config_toast.dart b/lib/src/config/smart_config_toast.dart
index 43984af..abc7a6a 100644
--- a/lib/src/config/smart_config_toast.dart
+++ b/lib/src/config/smart_config_toast.dart
@@ -23,6 +23,7 @@ class SmartConfigToast {
     this.intervalTime = const Duration(milliseconds: 100),
     this.awaitOverType = SmartAwaitOverType.dialogDismiss,
     this.maskTriggerType = SmartMaskTriggerType.up,
+    this.nonAnimationTypes = const [],
     this.isExist = false,
   });
 
@@ -133,6 +134,12 @@ class SmartConfigToast {
   /// 点击遮罩时, 被触发时机的类型 (具体请查看[SmartMaskTriggerType]注释)
   final SmartMaskTriggerType maskTriggerType;
 
+  /// For different scenes, the pop-up animation can be dynamically closed.
+  /// For details, please refer to [SmartNonAnimationType]
+  ///
+  /// 对于不同的场景, 可动态关闭弹窗动画, 具体请参照[SmartNonAnimationType]
+  final List<SmartNonAnimationType> nonAnimationTypes;
+
   /// whether toast(showToast()) exist on the screen
   ///
   /// toast(showToast())是否存在在界面上
diff --git a/lib/src/custom/toast/custom_toast.dart b/lib/src/custom/toast/custom_toast.dart
index d87203f..c5ff421 100644
--- a/lib/src/custom/toast/custom_toast.dart
+++ b/lib/src/custom/toast/custom_toast.dart
@@ -23,6 +23,7 @@ class CustomToast extends BaseDialog {
     required AlignmentGeometry alignment,
     required bool clickMaskDismiss,
     required SmartAnimationType animationType,
+    required List<SmartNonAnimationType> nonAnimationTypes,
     required AnimationBuilder? animationBuilder,
     required bool usePenetrate,
     required bool useAnimation,
@@ -30,6 +31,8 @@ class CustomToast extends BaseDialog {
     required Color maskColor,
     required Widget? maskWidget,
     required Duration displayTime,
+    required VoidCallback? onDismiss,
+    required VoidCallback? onMask,
     required bool debounce,
     required SmartToastType displayType,
     required Widget widget,
@@ -56,17 +59,24 @@ class CustomToast extends BaseDialog {
         maskWidget: maskWidget,
         animationTime: animationTime,
         animationType: animationType,
-        nonAnimationTypes: const [],
+        nonAnimationTypes: nonAnimationTypes,
         animationBuilder: animationBuilder,
         useAnimation: useAnimation,
         usePenetrate: usePenetrate,
-        onDismiss: null,
+        onDismiss: onDismiss,
         useSystem: false,
         reuse: false,
         awaitOverType: SmartDialog.config.toast.awaitOverType,
         maskTriggerType: SmartDialog.config.toast.maskTriggerType,
         ignoreArea: null,
-        onMask: () => clickMaskDismiss ? ToastTool.instance.dismiss() : null,
+        onMask: () {
+          onMask?.call();
+          if (!clickMaskDismiss ||
+              DebounceUtils.instance.banContinue(DebounceType.mask, true)) {
+            return;
+          }
+          ToastTool.instance.dismiss();
+        },
       );
     }
 
diff --git a/lib/src/helper/dialog_proxy.dart b/lib/src/helper/dialog_proxy.dart
index 138870c..30174ee 100644
--- a/lib/src/helper/dialog_proxy.dart
+++ b/lib/src/helper/dialog_proxy.dart
@@ -302,12 +302,15 @@ class DialogProxy {
     required AlignmentGeometry alignment,
     required bool clickMaskDismiss,
     required SmartAnimationType animationType,
+    required List<SmartNonAnimationType> nonAnimationTypes,
     required AnimationBuilder? animationBuilder,
     required bool usePenetrate,
     required bool useAnimation,
     required Duration animationTime,
     required Color maskColor,
     required Widget? maskWidget,
+    required VoidCallback? onDismiss,
+    required VoidCallback? onMask,
     required bool consumeEvent,
     required Duration displayTime,
     required bool debounce,
@@ -323,12 +326,15 @@ class DialogProxy {
       alignment: alignment,
       clickMaskDismiss: clickMaskDismiss,
       animationType: animationType,
+      nonAnimationTypes: nonAnimationTypes,
       animationBuilder: animationBuilder,
       usePenetrate: usePenetrate,
       useAnimation: useAnimation,
       animationTime: animationTime,
       maskColor: maskColor,
       maskWidget: maskWidget,
+      onDismiss: onDismiss,
+      onMask: onMask,
       displayTime: displayTime,
       debounce: debounce,
       displayType: displayType,
diff --git a/lib/src/smart_dialog.dart b/lib/src/smart_dialog.dart
index 6106cf1..ddb3627 100644
--- a/lib/src/smart_dialog.dart
+++ b/lib/src/smart_dialog.dart
@@ -753,6 +753,9 @@ class SmartDialog {
   ///
   /// [animationType]:For details, please refer to the [SmartAnimationType] comment
   ///
+  /// [nonAnimationTypes]:For different scenes, the pop-up animation can be dynamically closed.
+  /// For details, please refer to [SmartNonAnimationType]
+  ///
   /// [animationBuilder]:Support highly custom animation, please refer to [AnimationBuilder] description for details
   ///
   /// [usePenetrate]:true(the click event will penetrate mask),
@@ -766,13 +769,18 @@ class SmartDialog {
   ///
   /// [maskWidget]:highly customizable mask
   ///
+  /// [onDismiss]:This callback will be triggered when the dialog is closed
+  ///
+  /// [onMask]:This callback will be triggered when the mask is clicked
+  ///
+  /// [consumeEvent]:true (toast will consume touch events),
+  /// false (toast no longer consumes events, touch events can penetrate toast)
+  ///
   /// [debounce]:debounce feature
   ///
   /// [displayType]:provider multiple display logic,
   /// please refer to [SmartToastType] comment for detailed description
   ///
-  /// [consumeEvent]:true (toast will consume touch events), false (toast no longer consumes events, touch events can penetrate toast)
-  ///
   /// [builder]:the custom toast
   ///
   /// -------------------------------------------------------------------------------
@@ -791,6 +799,8 @@ class SmartDialog {
   ///
   /// [animationType]:具体可参照[SmartAnimationType]注释
   ///
+  /// [nonAnimationTypes]:对于不同的场景, 可动态关闭弹窗动画, 具体请参照[SmartNonAnimationType]
+  ///
   /// [animationBuilder]:支持高度自定义动画, 具体可参照[AnimationBuilder]说明
   ///
   /// [usePenetrate]:true(点击事件将穿透遮罩),false(不穿透)
@@ -803,12 +813,16 @@ class SmartDialog {
   ///
   /// [maskWidget]:可高度定制遮罩
   ///
-  /// [debounce]:防抖功能
+  /// [onDismiss]:在dialog被关闭的时候,该回调将会被触发
   ///
-  /// [displayType]:提供多种显示逻辑,详细描述请查看 [SmartToastType] 注释
+  /// [onMask]:点击遮罩时,该回调将会被触发
   ///
   /// [consumeEvent]:true(toast会消耗触摸事件),false(toast不再消耗事件,触摸事件能穿透toast)
   ///
+  /// [debounce]:防抖功能
+  ///
+  /// [displayType]:提供多种显示逻辑,详细描述请查看 [SmartToastType] 注释
+  ///
   /// [builder]:自定义toast
   static Future<void> showToast(
     String msg, {
@@ -817,12 +831,15 @@ class SmartDialog {
     AlignmentGeometry? alignment,
     bool? clickMaskDismiss,
     SmartAnimationType? animationType,
+    List<SmartNonAnimationType>? nonAnimationTypes,
     AnimationBuilder? animationBuilder,
     bool? usePenetrate,
     bool? useAnimation,
     Duration? animationTime,
     Color? maskColor,
     Widget? maskWidget,
+    VoidCallback? onDismiss,
+    VoidCallback? onMask,
     bool? consumeEvent,
     bool? debounce,
     SmartToastType? displayType,
@@ -841,12 +858,15 @@ class SmartDialog {
       alignment: alignment ?? config.toast.alignment,
       clickMaskDismiss: clickMaskDismiss ?? config.toast.clickMaskDismiss,
       animationType: animationType ?? config.toast.animationType,
+      nonAnimationTypes: nonAnimationTypes ?? config.toast.nonAnimationTypes,
       animationBuilder: animationBuilder,
       usePenetrate: usePenetrate ?? config.toast.usePenetrate,
       useAnimation: useAnimation ?? config.toast.useAnimation,
       animationTime: animationTime ?? config.toast.animationTime,
       maskColor: maskColor ?? config.toast.maskColor,
       maskWidget: maskWidget ?? config.toast.maskWidget,
+      onDismiss: onDismiss,
+      onMask: onMask,
       debounce: debounce ?? config.toast.debounce,
       displayType: displayType ?? config.toast.displayType,
       consumeEvent: consumeEvent ?? config.toast.consumeEvent,
diff --git a/pubspec.yaml b/pubspec.yaml
index c7dfdb0..40f121d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@ description:
   An elegant Flutter Dialog solution,
   Easily implement Toast, Loading and custom Dialog,
   Make the use of the dialog easier!
-version: 4.9.1
+version: 4.9.1+1
 homepage: https://github.com/fluttercandies/flutter_smart_dialog
 # flutter pub publish --server=https://pub.dartlang.org