createStaggeredBuilder static method
Widget Function(Widget, int)
createStaggeredBuilder({
- required BuildContext context,
- required FSAnimationType type,
- required FSAnimationDirection direction,
- Duration? duration,
- Curve? curve,
- Duration staggerDelay = const Duration(milliseconds: 100),
Creates a staggered animation builder for lists
Implementation
static Widget Function(Widget, int) createStaggeredBuilder({
required BuildContext context,
required FSAnimationType type,
required FSAnimationDirection direction,
Duration? duration,
Curve? curve,
Duration staggerDelay = const Duration(milliseconds: 100),
}) {
try {
final shouldAnimate = _shouldAnimate(context);
if (!shouldAnimate) {
return (Widget child, int index) => child;
}
final cacheKey =
'${type.name}_${direction.name}_${duration?.inMilliseconds}_${curve?.runtimeType}_${staggerDelay.inMilliseconds}';
return _builderCache.putIfAbsent(cacheKey, () {
final theme = FSTheme.of(context);
// ✅ FIXED: Convert theme.animation to our FSAnimation type
final FSAnimation animationConfig = (duration != null || curve != null)
? FSAnimation(
duration: duration ?? theme.animation.duration,
curve: curve ?? theme.animation.curve,
)
: _convertThemeAnimationToFSAnimation(theme.animation);
return (Widget child, int index) {
final delay =
Duration(milliseconds: staggerDelay.inMilliseconds * index);
return _buildAnimationByType(
child: child,
type: type,
direction: direction,
animation: animationConfig,
delay: delay,
);
};
});
} catch (error, stackTrace) {
debugPrint('Error creating staggered builder: $error\n$stackTrace');
return (Widget child, int index) => child;
}
}