From b178db56cd76db877d52478275d9417efa02a961 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 22 Dec 2025 14:03:18 -0500 Subject: [PATCH] fix: fix carousel scroll issue --- .../activity_user_summaries_widget.dart | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/pangea/activity_sessions/activity_user_summaries_widget.dart b/lib/pangea/activity_sessions/activity_user_summaries_widget.dart index cb58e55ff..797fbf444 100644 --- a/lib/pangea/activity_sessions/activity_user_summaries_widget.dart +++ b/lib/pangea/activity_sessions/activity_user_summaries_widget.dart @@ -108,6 +108,8 @@ class ButtonControlledCarouselView extends StatelessWidget { return const SizedBox(); } + final cardWidth = isColumnMode ? 400.0 : 350.0; + return Column( children: [ SizedBox( @@ -125,7 +127,7 @@ class ButtonControlledCarouselView extends StatelessWidget { (role) => role.userId == p.participantId, ); return Container( - width: isColumnMode ? 400.0 : 350.0, + width: cardWidth, margin: const EdgeInsets.only(right: 5.0), padding: const EdgeInsets.all(12.0), decoration: ShapeDecoration( @@ -255,8 +257,32 @@ class ButtonControlledCarouselView extends StatelessWidget { selected: highlightedRole?.id == userRole.id, onTap: () { controller.activityController.highlightRole(userRole); - controller.activityController.carouselController - .jumpTo(i * 250.0); + + final scrollController = + controller.activityController.carouselController; + + if (!scrollController.hasClients) return; + + const spacing = 5.0; + final itemExtent = cardWidth + spacing; + + final viewportWidth = + scrollController.position.viewportDimension; + + final itemCenter = (i * itemExtent) + (cardWidth / 2); + + final targetOffset = itemCenter - (viewportWidth / 2); + + final clampedOffset = targetOffset.clamp( + scrollController.position.minScrollExtent, + scrollController.position.maxScrollExtent, + ); + + scrollController.animateTo( + clampedOffset, + duration: const Duration(milliseconds: 300), + curve: Curves.easeOutCubic, + ); }, ); }).toList(),