show static method
Implementation
static Future<bool?> show({
required BuildContext context,
required String title,
String? message,
Widget? content,
String confirmLabel = 'OK',
String? cancelLabel = 'Cancel',
bool isDestructive = false,
}) {
return showGeneralDialog<bool>(
context: context,
barrierDismissible: true,
barrierLabel: 'Dismiss',
barrierColor: const Color(0x88000000),
transitionDuration: const Duration(milliseconds: 450),
pageBuilder: (ctx, animation, secondaryAnimation) {
return AnimatedBuilder(
animation: animation,
builder: (context, child) {
final raw = animation.value.clamp(0.0, 1.0);
// Custom spring-like curve with slight overshoot
final t = Curves.elasticOut.transform(raw).clamp(0.0, 1.15);
final opacity = Curves.easeOut.transform(raw).clamp(0.0, 1.0);
final slide = 0.10 * (1.0 - t);
final scale = 0.88 + 0.12 * t;
return Transform.translate(
offset: Offset(0, slide * MediaQuery.sizeOf(context).height),
child: Transform.scale(
scale: scale.clamp(0.88, 1.02),
alignment: Alignment.bottomCenter,
child: Opacity(
opacity: opacity,
child: child,
),
),
);
},
child: SafeArea(
child: Align(
alignment: Alignment.bottomCenter,
child: Padding(
padding: EdgeInsets.only(
left: KinSpacing.sm + MediaQuery.paddingOf(ctx).left,
right: KinSpacing.sm + MediaQuery.paddingOf(ctx).right,
bottom: KinSpacing.xs,
),
child: KinDialog(
title: title,
message: message,
content: content,
confirmLabel: confirmLabel,
cancelLabel: cancelLabel,
onConfirm: () => Navigator.pop(ctx, true),
onCancel: () => Navigator.pop(ctx, false),
isDestructive: isDestructive,
),
),
),
),
);
},
);
}