showSlideInOverlay<T> static method
Future<T?>
showSlideInOverlay<T>({
- required BuildContext context,
- required Widget child,
- double widthRatio = 0.8,
- String barrierLabel = '关闭遮罩层',
- double backdropOpacity = 0.5,
- Duration animationDuration = const Duration(milliseconds: 300),
- bool barrierDismissible = true,
- BorderRadius? borderRadius,
- VoidCallback? onClose,
显示从右侧滑入的遮罩层
context 用于显示遮罩层的上下文
child 要显示在遮罩层中的内容
widthRatio 遮罩层宽度比例(相对于屏幕宽度),默认 0.8
barrierLabel 无障碍标签,默认 "关闭遮罩层"
backdropOpacity 背景遮罩透明度,默认 0.5
animationDuration 动画持续时间,默认 300 毫秒
barrierDismissible 是否允许点击背景关闭,默认 true
borderRadius 遮罩层圆角,默认只有左上和左下圆角
onClose 遮罩层关闭时的回调
Implementation
static Future<T?> showSlideInOverlay<T>({
required BuildContext context,
required Widget child,
double widthRatio = 0.8,
String barrierLabel = '关闭遮罩层',
double backdropOpacity = 0.5,
Duration animationDuration = const Duration(milliseconds: 300),
bool barrierDismissible = true,
BorderRadius? borderRadius,
VoidCallback? onClose,
}) {
if (kDebugMode) {
debugPrint('OverlayService: showSlideInOverlay - 显示遮罩层');
}
return showGeneralDialog<T>(
context: context,
barrierColor: Colors.transparent,
barrierDismissible: false,
// 禁用默认的 barrier 点击关闭,我们自己处理
barrierLabel: barrierLabel,
pageBuilder: (context, animation, secondaryAnimation) {
if (kDebugMode) {
debugPrint('OverlayService: pageBuilder - 创建遮罩层页面');
}
return _SlideInOverlay(
widthRatio: widthRatio,
backdropOpacity: backdropOpacity,
animationDuration: animationDuration,
borderRadius: borderRadius,
onClose: onClose ?? () {},
child: child,
closeCallback: () {
if (kDebugMode) {
debugPrint('OverlayService: closeCallback - 触发关闭遮罩层');
}
_closeCurrentOverlay?.call();
},
);
},
transitionBuilder: (context, animation, secondaryAnimation, child) {
return child;
},
transitionDuration: Duration.zero,
).then((_) {
// 对话框关闭后,清除回调引用
_closeCurrentOverlay = null;
return null;
});
}