showAnimationWidget static method

CancelFunc showAnimationWidget({
  1. required ToastBuilder toastBuilder,
  2. required Duration animationDuration,
  3. Duration? animationReverseDuration = nilDuration,
  4. WrapAnimation? wrapAnimation = nilWrapAnimation,
  5. WrapAnimation? wrapToastAnimation = nilWrapAnimation,
  6. BackButtonBehavior? backButtonBehavior = nilBackButtonBehavior,
  7. Object crossPage = nil,
  8. Object allowClick = nil,
  9. Object clickClose = nil,
  10. Object ignoreContentClick = nil,
  11. Object onlyOne = nil,
  12. Object enableKeyboardSafeArea = nil,
  13. Color backgroundColor = nilColor,
  14. Duration? duration = nilDuration,
  15. VoidCallback? onClose = nilVoidCallback,
  16. UniqueKey? key,
  17. String? groupKey,
})

Displays a Toast that uses Animation. For usage, refer to: BotToast.showCustomNotification BotToast.showCustomText BotToast.showCustomLoading BotToast.showAttachedWidget

toastBuilder is the builder function to generate the Widget to be displayed. animationDuration is the duration of the forward animation, which is equivalent to AnimationController.duration. It's recommended not to exceed duration. animationReverseDuration is the duration of the reverse animation, which is equivalent to AnimationController.reverseDuration.

wrapAnimation wraps the animation of the MainContent area and can be used for custom animations. If null, it indicates no animation is needed. Using this function does not necessarily require using animations; it can also perform additional widget wrapping.

wrapToastAnimation wraps the animation of the ToastContent area and can be used for custom animations. If null, it indicates no animation is needed. Using this function does not necessarily require using animations; it can also perform additional widget wrapping.

key Please refer to showEnhancedWidget.key. groupKey Please refer to showEnhancedWidget.groupKey. crossPage Please refer to showEnhancedWidget.crossPage. allowClick Please refer to showEnhancedWidget.allowClick. clickClose Please refer to showEnhancedWidget.clickClose. ignoreContentClick Please refer to showEnhancedWidget.ignoreContentClick. onlyOne Please refer to showEnhancedWidget.onlyOne. backgroundColor Please refer to showEnhancedWidget.backgroundColor. duration Please refer to showEnhancedWidget.duration. onClose Please refer to showEnhancedWidget.onClose. backButtonBehavior Please refer to showEnhancedWidget.backButtonBehavior. enableKeyboardSafeArea Please refer to showEnhancedWidget.enableKeyboardSafeArea.

显示使用了Animation的Toast 使用请看: BotToast.showCustomNotification BotToast.showCustomText BotToast.showCustomLoading BotToast.showAttachedWidget

toastBuilder 生成需要显示的Widget的builder函数 animationDuration 正向动画的持续时间,其含义等同于AnimationController.duration,值得注意的是建议不要超过duration animationReverseDuration 反向动画的持续时间,其含义等同于AnimationController.reverseDuration

wrapAnimation 包装MainContent区域的动画,可用于自定义动画,如果为null则表示不需要动画, 使用这个函数不意味着一定要使用动画,可以额外做一些包装widget的处理

wrapToastAnimation 包装ToastContent区域的动画,可用于自定义动画,如果为null则表示不需要动画, 使用这个函数不意味着一定要使用动画,可以额外做一些包装widget的处理

key 请看showEnhancedWidget.key groupKey 请看showEnhancedWidget.groupKey crossPage 请看showEnhancedWidget.crossPage allowClick 请看showEnhancedWidget.allowClick clickClose 请看showEnhancedWidget.clickClose ignoreContentClick 请看showEnhancedWidget.ignoreContentClick onlyOne 请看showEnhancedWidget.onlyOne backgroundColor 请看showEnhancedWidget.backgroundColor duration 请看showEnhancedWidget.duration onClose 请看showEnhancedWidget.onClose backButtonBehavior 请看showEnhancedWidget.backButtonBehavior enableKeyboardSafeArea 请看showEnhancedWidget.enableKeyboardSafeArea

Implementation

static CancelFunc showAnimationWidget({
  required ToastBuilder toastBuilder,
  required Duration animationDuration,
  Duration? animationReverseDuration = nilDuration,
  WrapAnimation? wrapAnimation = nilWrapAnimation,
  WrapAnimation? wrapToastAnimation = nilWrapAnimation,
  BackButtonBehavior? backButtonBehavior = nilBackButtonBehavior,
  /*bool*/ Object crossPage = nil,
  /*bool*/ Object allowClick = nil,
  /*bool*/ Object clickClose = nil,
  /*bool*/ Object ignoreContentClick = nil,
  /*bool*/ Object onlyOne = nil,
  /*bool*/ Object enableKeyboardSafeArea = nil,
  Color backgroundColor = nilColor,
  Duration? duration = nilDuration,
  VoidCallback? onClose = nilVoidCallback,
  UniqueKey? key,
  String? groupKey,
}) {
  var o = defaultOption.animation;

  animationReverseDuration = returnFirstIfNotNil(animationReverseDuration, o.animationReverseDuration);
  wrapAnimation = returnFirstIfNotNil(wrapAnimation, o.wrapAnimation);
  wrapToastAnimation = returnFirstIfNotNil(wrapToastAnimation, o.wrapToastAnimation);
  backButtonBehavior = returnFirstIfNotNil(backButtonBehavior, o.backButtonBehavior);
  crossPage = returnFirstIfNotNil(crossPage, o.crossPage);
  allowClick = returnFirstIfNotNil(allowClick, o.allowClick);
  clickClose = returnFirstIfNotNil(clickClose, o.clickClose);
  ignoreContentClick = returnFirstIfNotNil(ignoreContentClick, o.ignoreContentClick);
  onlyOne = returnFirstIfNotNil(onlyOne, o.onlyOne);
  enableKeyboardSafeArea = returnFirstIfNotNil(enableKeyboardSafeArea, o.enableKeyboardSafeArea);
  backgroundColor = returnFirstIfNotNil(backgroundColor, o.backgroundColor);
  duration = returnFirstIfNotNil(duration, o.duration);
  onClose = returnFirstIfNotNil(onClose, o.onClose);

  assert(isNilOr<bool>([enableKeyboardSafeArea, onlyOne, clickClose, allowClick, ignoreContentClick, crossPage]), 'Must be of bool type');

  AnimationController? controller = _createAnimationController(animationDuration, reverseDuration: animationReverseDuration);

  return showEnhancedWidget(
      allowClick: allowClick,
      clickClose: clickClose,
      groupKey: groupKey,
      key: key,
      crossPage: crossPage,
      onClose: onClose,
      onlyOne: onlyOne,
      enableKeyboardSafeArea: enableKeyboardSafeArea,
      backButtonBehavior: backButtonBehavior,
      backgroundColor: backgroundColor,
      ignoreContentClick: ignoreContentClick,
      closeFunc: () async {
        await controller?.reverse();
      },
      duration: duration,
      warpWidget: (cancel, child) => ProxyInitState(
            initStateCallback: () {
              assert(!controller!.isAnimating);
              controller!.forward();
            },
            child: ProxyDispose(
                disposeCallback: () {
                  controller!.dispose();
                  controller = null;
                },
                child: wrapAnimation != null ? wrapAnimation(controller!, cancel, child) : child),
          ),
      toastBuilder: (cancelFunc) =>
          wrapToastAnimation != null ? wrapToastAnimation(controller!, cancelFunc, toastBuilder(cancelFunc)) : toastBuilder(cancelFunc));
}