animateToItem method
Animates the controlled carousel to the given item index.
Implementation
Future<void> animateToItem(
int index, {
Duration duration = const Duration(milliseconds: 300),
Curve curve = Curves.ease,
}) async {
final move = _moveTo;
if (move != null) {
await move(index, jump: false, duration: duration, curve: curve);
return;
}
if (!hasClients) {
return;
}
final List<double>? extents = variedItemExtents;
if (extents != null && extents.isNotEmpty) {
await animateTo(
_variedOffset(index, extents),
duration: duration,
curve: curve,
);
return;
}
if (_carouselState == null) {
return;
}
final bool hasFlexWeights =
_carouselState!._flexWeights?.isNotEmpty ?? false;
var targetIndex = index;
if (_carouselState!.widget.itemBuilder != null) {
final int? itemCount = _carouselState!.widget.itemCount;
targetIndex = itemCount != null ? index.clamp(0, itemCount - 1) : 0;
} else {
targetIndex = index.clamp(0, _carouselState!.widget.children.length - 1);
}
await Future.wait<void>(<Future<void>>[
for (final _CarouselPosition position
in positions.cast<_CarouselPosition>())
position.animateTo(
_getTargetOffset(position, targetIndex, hasFlexWeights),
duration: duration,
curve: curve,
),
]);
}