celebrateInDialog static method
- BuildContext context, {
- Preset preset = Preset.nova,
- CelebrationScene? scene,
- ConfettiShowcase? showcase,
- bool enableHaptics = true,
- bool enableSound = false,
- String? soundAssetPath,
- CelebrationFeedback? feedback,
- List<
String> ? emojiPool, - ConfettiCustomization? customization,
- CelebrationMessageOptions? overlayMessage,
- VoidCallback? onComplete,
- bool barrierDismissible = false,
- Color? barrierColor,
- bool useSafeArea = true,
Celebrates inside a transparent, edge-to-edge Dialog (modal full-screen celebration overlay).
Returns a Future that completes when the dialog route is popped: either
after particles finish, when CelebrationMessageOptions.durationInSeconds
elapses, or when the user dismisses the barrier (if barrierDismissible
is true). onComplete runs immediately before the route is popped from a
successful finish (particles or timer), not when the barrier dismisses
the dialog.
Does nothing when Navigator.maybeOf is null.
Implementation
static Future<void> celebrateInDialog(
BuildContext context, {
Preset preset = Preset.nova,
CelebrationScene? scene,
ConfettiShowcase? showcase,
bool enableHaptics = true,
bool enableSound = false,
String? soundAssetPath,
CelebrationFeedback? feedback,
List<String>? emojiPool,
ConfettiCustomization? customization,
CelebrationMessageOptions? overlayMessage,
VoidCallback? onComplete,
bool barrierDismissible = false,
Color? barrierColor,
bool useSafeArea = true,
}) async {
final navigator = Navigator.maybeOf(context);
if (navigator == null) return;
final effectivePreset = scene?.preset ?? preset;
final effectiveCustomization =
ConfettiCustomization.merge(scene?.customization, customization);
final msg = overlayMessage;
final messageOptions = msg ?? const CelebrationMessageOptions(message: '');
final showBanner = msg != null && msg.shouldPaintText;
return showDialog<void>(
context: context,
barrierDismissible: barrierDismissible,
barrierColor: barrierColor ?? const Color(0x80000000),
useSafeArea: useSafeArea,
builder: (dialogContext) {
return _CelebrationDialogHost(
preset: effectivePreset,
showcase: showcase,
customization: effectiveCustomization,
feedback: feedback,
enableHaptics: enableHaptics,
enableSound: enableSound,
soundAssetPath: soundAssetPath,
emojiPool: emojiPool,
messageOptions: messageOptions,
showMessageLayer: showBanner,
onFinished: () {
onComplete?.call();
if (dialogContext.mounted) {
Navigator.of(dialogContext).pop();
}
},
);
},
);
}