thumbails fix

This commit is contained in:
Abraham
2026-01-15 21:34:40 -08:00
parent ec5c62a64b
commit 0b0d9a81e2
3 changed files with 80 additions and 15 deletions

View File

@@ -3,6 +3,8 @@ import 'dart:html' as html;
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:chewie/chewie.dart';
import 'package:get_thumbnail_video/index.dart';
import 'package:get_thumbnail_video/video_thumbnail.dart';
import 'package:energy_media/models/media/media_models.dart';
import 'package:energy_media/providers/videos_provider.dart';
import 'package:energy_media/theme/theme.dart';
@@ -130,6 +132,37 @@ class _PremiumUploadDialogState extends State<PremiumUploadDialog> {
}
}
/// Genera un thumbnail automáticamente desde el video si no se seleccionó poster
Future<void> _generateThumbnailFromVideo() async {
if (_videoBlobUrl == null || selectedVideo == null) return;
try {
// Generar thumbnail desde el video
final thumbnailBytes = await VideoThumbnail.thumbnailData(
video: _videoBlobUrl!,
imageFormat: ImageFormat.JPEG,
maxWidth: 1280, // Alta calidad para poster
quality: 85,
);
if (thumbnailBytes != null && thumbnailBytes.isNotEmpty) {
// Actualizar el provider con el thumbnail generado (sin mostrar en UI)
widget.provider.webPosterBytes = thumbnailBytes;
widget.provider.posterName =
'thumbnail_${videoFileName ?? 'video'}.jpg';
widget.provider.posterFileExtension = '.jpg';
// NO actualizar selectedPoster ni posterFileName para que no se muestre en UI
// El thumbnail está disponible en el provider para subir automáticamente
debugPrint('✅ Thumbnail generado automáticamente (oculto en UI)');
}
} catch (e) {
debugPrint('⚠️ Error generando thumbnail automático: $e');
// No es crítico, el video se subirá sin poster
}
}
Future<void> _uploadVideo() async {
if (titleController.text.isEmpty ||
selectedVideo == null ||
@@ -148,6 +181,11 @@ class _PremiumUploadDialogState extends State<PremiumUploadDialog> {
setState(() => isUploading = true);
// Si no hay poster seleccionado, generar thumbnail automáticamente desde el video
if (selectedPoster == null && _videoBlobUrl != null) {
await _generateThumbnailFromVideo();
}
// Procesar tags: separar por comas o espacios
List<String>? tags;
if (tagsController.text.isNotEmpty) {