createStaggeredBuilder static method

Widget Function(Widget, int) createStaggeredBuilder({
  1. required BuildContext context,
  2. required FSAnimationType type,
  3. required FSAnimationDirection direction,
  4. Duration? duration,
  5. Curve? curve,
  6. 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;
  }
}