CelebrationScene.compose constructor
- ConfettiType? confettiType,
- AnimationConfetti? animation,
- ConfettiColorTheme? colorTheme,
- ConfettiStyle? style,
- ConfettiDensity? density,
Composes optional catalog knobs (ConfettiType, AnimationConfetti, ConfettiColorTheme, ConfettiStyle, ConfettiDensity) into one scene.
Layers merge in order: base type (or default Preset.nova) → animation tweak → shape style → density → color theme (explicit theme wins over type colors).
Implementation
factory CelebrationScene.compose({
ConfettiType? confettiType,
AnimationConfetti? animation,
ConfettiColorTheme? colorTheme,
ConfettiStyle? style,
ConfettiDensity? density,
}) {
final CelebrationScene base = confettiType != null
? CelebrationScene.fromConfettiType(confettiType)
: const CelebrationScene(preset: Preset.nova);
var preset = base.preset;
ConfettiCustomization? cust = base.customization;
if (animation != null) {
preset = ConfettiAnimationMaps.presetFor(animation);
cust = ConfettiCustomization.merge(
cust,
ConfettiAnimationMaps.extraCustomizationFor(animation),
);
}
if (style != null) {
cust = ConfettiCustomization.merge(
cust,
ConfettiCustomization(shapeMix: ConfettiStyleShapes.shapesFor(style)),
);
}
if (density != null) {
final scaled = ConfettiDensityScale.scaledCount(
preset.defaultParticleCount,
density,
);
cust = ConfettiCustomization.merge(
cust,
ConfettiCustomization(particleCount: scaled),
);
}
if (colorTheme != null) {
cust = ConfettiCustomization.merge(
cust,
ConfettiCustomization(colors: ConfettiColorThemes.palette(colorTheme)),
);
}
return CelebrationScene(preset: preset, customization: cust);
}