This commit is contained in:
2025-06-24 13:05:08 +02:00
parent ba7505c2b3
commit 93a89ba4b9
3 changed files with 67 additions and 67 deletions

View File

@ -282,17 +282,24 @@ class _MediaDetailScreenState extends State<MediaDetailScreen> {
Widget _buildMedia(MediaItem item, bool isActive) {
Widget mediaWidget;
final bool isFavorite =
item.favorites?.any((f) => f.userId == authController.user.value?.id) ??
false;
if (item.mime.startsWith('image/')) {
mediaWidget = CachedNetworkImage(
imageUrl: item.mediaUrl,
fit: BoxFit.contain,
placeholder: (context, url) =>
const Center(child: CircularProgressIndicator()),
errorWidget: (c, e, s) => const Icon(Icons.broken_image, size: 100),
mediaWidget = GestureDetector(
onDoubleTap: () => _handleFavoriteToggle(item, isFavorite),
child: CachedNetworkImage(
imageUrl: item.mediaUrl,
fit: BoxFit.contain,
placeholder: (context, url) =>
const Center(child: CircularProgressIndicator()),
errorWidget: (c, e, s) => const Icon(Icons.broken_image, size: 100),
),
);
} else if (item.mime.startsWith('video/') ||
item.mime.startsWith('audio/')) {
final key = _videoWidgetKeys.putIfAbsent(
final GlobalKey<VideoWidgetState> key = _videoWidgetKeys.putIfAbsent(
item.id,
() => GlobalKey<VideoWidgetState>(),
);
@ -305,39 +312,33 @@ class _MediaDetailScreenState extends State<MediaDetailScreen> {
setState(() => _readyItemIds.add(item.id));
}
},
onDoubleTap: () => _handleFavoriteToggle(item, isFavorite),
);
} else {
mediaWidget = const Icon(Icons.help_outline, size: 100);
}
final bool isFavorite =
item.favorites?.any((f) => f.userId == authController.user.value?.id) ??
false;
return Hero(
tag: 'media_${item.id}',
child: GestureDetector(
onDoubleTap: () => _handleFavoriteToggle(item, isFavorite),
child: Stack(
alignment: Alignment.center,
children: [
mediaWidget,
AnimatedOpacity(
opacity: _showFavoriteAnimation[item.id] ?? false ? 1.0 : 0.0,
duration: const Duration(milliseconds: 200),
child: AnimatedScale(
scale: _showFavoriteAnimation[item.id] ?? false ? 1.0 : 0.5,
duration: const Duration(milliseconds: 400),
curve: Curves.easeOutBack,
child: Icon(
isFavorite ? Icons.favorite : Icons.favorite_outline,
color: Colors.red,
size: 100,
),
child: Stack(
alignment: Alignment.center,
children: [
mediaWidget,
AnimatedOpacity(
opacity: _showFavoriteAnimation[item.id] ?? false ? 1.0 : 0.0,
duration: const Duration(milliseconds: 200),
child: AnimatedScale(
scale: _showFavoriteAnimation[item.id] ?? false ? 1.0 : 0.5,
duration: const Duration(milliseconds: 400),
curve: Curves.easeOutBack,
child: Icon(
isFavorite ? Icons.favorite : Icons.favorite_outline,
color: Colors.red,
size: 100,
),
),
],
),
),
],
),
);
}