forked from eatvio/eatvio_app
Merge pull request 'пофиксили отображение коунтера карусели при переключении картинок, при посте с одной картинкой и одним видео. добавили таймер на видео.' (#1002) from Hasan/eatvio_app:personalized_feed into personalized_feed
Reviewed-on: eatvio/eatvio_app#1002
This commit is contained in:
@@ -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<ScrollNotification>(
|
||||
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),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user