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