diff --git a/lib/features/feed/presentation/widgets/blog_post_widget.dart b/lib/features/feed/presentation/widgets/blog_post_widget.dart index 8751798b..0aa3feb2 100644 --- a/lib/features/feed/presentation/widgets/blog_post_widget.dart +++ b/lib/features/feed/presentation/widgets/blog_post_widget.dart @@ -244,46 +244,67 @@ class _BlogPostMediaContent extends StatefulWidget { } class _BlogPostMediaContentState extends State<_BlogPostMediaContent> { - static const _counterDisplayDuration = Duration(seconds: 2); + static const _counterDisplayDuration = Duration(seconds: 1); bool _isCounterVisible = false; Timer? _counterHideTimer; + bool get _isCurrentSlideVideo => + widget.videoEmbedUrl != null && widget.currentGalleryIndex == widget.galleryUrls.length; + + bool get _shouldShowCounter => !_isCurrentSlideVideo || _isCounterVisible; + @override void dispose() { _counterHideTimer?.cancel(); super.dispose(); } + @override + void didUpdateWidget(covariant _BlogPostMediaContent oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.currentGalleryIndex != widget.currentGalleryIndex) { + _scheduleCounterHideOnVideo(); + } + } + + void _scheduleCounterHideOnVideo() { + _counterHideTimer?.cancel(); + if (!_isCurrentSlideVideo) return; + + _counterHideTimer = Timer(_counterDisplayDuration, () { + if (mounted && _isCurrentSlideVideo) { + setState(() => _isCounterVisible = false); + } + }); + } + bool _handleCarouselScroll(ScrollNotification notification) { if (notification is ScrollStartNotification || notification is ScrollUpdateNotification) { _counterHideTimer?.cancel(); if (!_isCounterVisible) { setState(() => _isCounterVisible = true); } - } else if (notification is ScrollEndNotification && _isCounterVisible) { - _counterHideTimer?.cancel(); - _counterHideTimer = Timer(_counterDisplayDuration, () { - if (mounted) { - setState(() => _isCounterVisible = false); - } - }); + } else if (notification is ScrollEndNotification && _isCounterVisible && _isCurrentSlideVideo) { + _scheduleCounterHideOnVideo(); } return false; } @override Widget build(BuildContext context) { - final mediaContentCount = widget.videoEmbedUrl != null ? widget.galleryUrls.length + 1 : widget.galleryUrls.length; + final hasVideo = widget.videoEmbedUrl != null; + final mediaContentCount = hasVideo ? widget.galleryUrls.length + 1 : widget.galleryUrls.length; + final showCarousel = mediaContentCount > 1; return Column( children: [ - if (widget.galleryUrls.length > 1) ...[ + if (showCarousel) ...[ Stack( children: [ NotificationListener( onNotification: _handleCarouselScroll, child: CarouselSlider.builder( - itemCount: widget.galleryUrls.length + 1, + itemCount: mediaContentCount, itemBuilder: (context, itemIndex, _) { if (itemIndex == widget.galleryUrls.length) { if (widget.videoEmbedUrl != null) { @@ -315,7 +336,7 @@ class _BlogPostMediaContentState extends State<_BlogPostMediaContent> { right: 12, child: IgnorePointer( child: AnimatedOpacity( - opacity: _isCounterVisible ? 1 : 0, + opacity: _shouldShowCounter ? 1 : 0, duration: const Duration(milliseconds: 150), child: _GalleryPhotoCounter(currentIndex: widget.currentGalleryIndex, total: mediaContentCount), ),