advanced_video_player 0.0.2 copy "advanced_video_player: ^0.0.2" to clipboard
advanced_video_player: ^0.0.2 copied to clipboard

Un reproductor de video avanzado para Flutter con controles modernos, Picture-in-Picture, Google Cast, AirPlay y diseño personalizable.

example/lib/main.dart

/// Ejemplo de uso del paquete Advanced Video Player
///
/// Este ejemplo demuestra todas las características principales del reproductor,
/// incluyendo controles personalizables, Picture-in-Picture, AirPlay,
/// y funcionalidades de compartir pantalla (SharePlay/Google Cast).
library;

import 'package:flutter/material.dart';
import 'package:advanced_video_player/advanced_video_player.dart';

/// Punto de entrada de la aplicación de ejemplo
void main() {
  runApp(const MyApp());
}

/// Widget raíz de la aplicación de ejemplo
///
/// Configura el tema y la estructura básica de la aplicación,
/// incluyendo el título y la página principal de demostración.
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Advanced Video Player Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const VideoPlayerDemo(),
    );
  }
}

/// Widget principal de demostración del reproductor de video
///
/// Muestra un ejemplo completo de cómo usar el [AdvancedVideoPlayer]
/// con todas sus características: controles personalizables, callbacks,
/// Picture-in-Picture, AirPlay y funcionalidades de compartir pantalla.
class VideoPlayerDemo extends StatefulWidget {
  const VideoPlayerDemo({super.key});

  @override
  State<VideoPlayerDemo> createState() => _VideoPlayerDemoState();
}

/// Estado del widget de demostración
///
/// Maneja la inicialización de Google Cast y la configuración
/// del reproductor de video con todas sus opciones.
class _VideoPlayerDemoState extends State<VideoPlayerDemo> {
  /// URL del video de demostración
  ///
  /// Se utiliza el video Big Buck Bunny de Google Cloud Storage,
  /// un video de dominio público ideal para pruebas.
  final String _videoUrl =
      'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4';

  @override
  void initState() {
    super.initState();
    _initializeGoogleCast();
  }

  /// Inicializa Google Cast para Android
  ///
  /// Este método debe llamarse al iniciar la aplicación para habilitar
  /// la funcionalidad de transmisión a Chromecast y otros dispositivos Cast.
  /// Los errores se capturan silenciosamente para evitar problemas en iOS.
  void _initializeGoogleCast() async {
    try {
      await AdvancedVideoPlayerCast.initializeCast();
    } catch (e) {
      // Ignorar errores en iOS donde Google Cast no está disponible
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xFF1A1A1A),
      appBar: AppBar(
        title: const Text(
          'Advanced Video Player',
          style: TextStyle(
            color: Colors.white,
            fontWeight: FontWeight.w600,
          ),
        ),
        backgroundColor: const Color(0xFF2D2D2D),
        elevation: 0,
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(20),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // Título
            const Text(
              'Reproductor de Video Avanzado',
              style: TextStyle(
                color: Colors.white,
                fontSize: 28,
                fontWeight: FontWeight.bold,
              ),
            ),
            const SizedBox(height: 8),
            const Text(
              'Un reproductor moderno con controles intuitivos y diseño atractivo',
              style: TextStyle(
                color: Colors.white70,
                fontSize: 16,
              ),
            ),
            const SizedBox(height: 30),

            // ═══════════════════════════════════════════════════════════
            // REPRODUCTOR DE VIDEO
            // ═══════════════════════════════════════════════════════════
            // Configuración completa del AdvancedVideoPlayer con:
            // - Colores personalizados (naranja y coral)
            // - Callbacks para eventos (fin de video y errores)
            // - Picture-in-Picture habilitado
            // - Compartir pantalla (SharePlay/Google Cast)
            // - AirPlay para iOS
            // - Saltos de 10 segundos
            Container(
              width: double.infinity,
              constraints: const BoxConstraints(
                maxWidth: 800,
                maxHeight: 450,
              ),
              child: AdvancedVideoPlayer(
                // URL del video a reproducir
                videoSource: _videoUrl,

                // Callback cuando el video termina de reproducirse
                onVideoEnd: () {
                  ScaffoldMessenger.of(context).showSnackBar(
                    const SnackBar(
                      content: Text('¡Video terminado!'),
                      backgroundColor: Color(0xFF6366F1),
                    ),
                  );
                },

                // Callback para manejar errores durante la reproducción
                onError: (error) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text('Error: $error'),
                      backgroundColor: Colors.red,
                    ),
                  );
                },

                // Personalización de colores
                primaryColor: const Color.fromARGB(255, 255, 81, 0),
                secondaryColor: const Color(0xFFED8C60),

                // Duración de los saltos adelante/atrás en segundos
                skipDuration: 10,

                // Habilitar características avanzadas
                enablePictureInPicture: true, // Android 8.0+ / iOS 14+
                enableScreenSharing:
                    true, // SharePlay (iOS) / Google Cast (Android)
                enableAirPlay: true, // Solo iOS

                // 🆕 NUEVO: Usar reproductor nativo en iOS para mejor PiP
                useNativePlayerOnIOS: true,

                // Metadatos del video
                videoTitle: 'Big Buck Bunny - Demostración',
                videoDescription:
                    'Un video de demostración para probar el reproductor avanzado con funcionalidades de compartir pantalla',
              ),
            ),

            const SizedBox(height: 40),

            // ═══════════════════════════════════════════════════════════
            // SECCIÓN DE CARACTERÍSTICAS
            // ═══════════════════════════════════════════════════════════
            // Lista visual de todas las funcionalidades del reproductor
            const Text(
              'Características',
              style: TextStyle(
                color: Colors.white,
                fontSize: 24,
                fontWeight: FontWeight.bold,
              ),
            ),
            const SizedBox(height: 20),

            // Controles básicos del reproductor
            _buildFeatureCard(
              icon: Icons.play_circle_filled,
              title: 'Controles Intuitivos',
              description:
                  'Play/Pause, retroceder 10s, avanzar 10s, pantalla completa y Picture-in-Picture',
              color: const Color(0xFF6366F1),
            ),

            const SizedBox(height: 16),

            // Navegación temporal en el video
            _buildFeatureCard(
              icon: Icons.timeline,
              title: 'Barra de Progreso Interactiva',
              description:
                  'Haz clic en cualquier parte para saltar a esa posición',
              color: const Color(0xFF8B5CF6),
            ),

            const SizedBox(height: 16),

            // Comportamiento automático de la interfaz
            _buildFeatureCard(
              icon: Icons.visibility,
              title: 'Controles Automáticos',
              description:
                  'Los controles aparecen y desaparecen automáticamente',
              color: const Color(0xFF10B981),
            ),

            const SizedBox(height: 16),

            // Personalización de la apariencia
            _buildFeatureCard(
              icon: Icons.palette,
              title: 'Diseño Personalizable',
              description:
                  'Colores personalizables y UI moderna con gradientes',
              color: const Color(0xFFF59E0B),
            ),

            const SizedBox(height: 16),

            // Funcionalidad Picture-in-Picture
            _buildFeatureCard(
              icon: Icons.picture_in_picture_alt,
              title: 'Picture-in-Picture',
              description:
                  'Ve videos en ventana flotante mientras usas otras apps (Android 8.0+ / iOS 14+)',
              color: const Color(0xFFEC4899),
            ),

            const SizedBox(height: 16),

            // Transmisión a otros dispositivos
            _buildFeatureCard(
              icon: Icons.cast,
              title: 'Compartir Pantalla',
              description:
                  'Comparte videos con otros dispositivos usando SharePlay (iOS) o Google Cast (Android)',
              color: const Color(0xFF06B6D4),
            ),

            const SizedBox(height: 16),

            // Compatibilidad con AirPlay (solo iOS)
            _buildFeatureCard(
              icon: Icons.airplay,
              title: 'AirPlay (iOS)',
              description:
                  'Reproduce videos en Apple TV y otros dispositivos compatibles con AirPlay',
              color: const Color(0xFF8B5CF6),
            ),

            const SizedBox(height: 40),

            // ═══════════════════════════════════════════════════════════
            // INFORMACIÓN ADICIONAL
            // ═══════════════════════════════════════════════════════════
            // Panel informativo con detalles del video y nuevas funcionalidades
            Container(
              padding: const EdgeInsets.all(20),
              decoration: BoxDecoration(
                color: const Color(0xFF2D2D2D),
                borderRadius: BorderRadius.circular(12),
                border: Border.all(
                  color: const Color(0xFF6366F1).withOpacity(0.3),
                  width: 1,
                ),
              ),
              child: const Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    'Información del Video',
                    style: TextStyle(
                      color: Colors.white,
                      fontSize: 18,
                      fontWeight: FontWeight.w600,
                    ),
                  ),
                  SizedBox(height: 12),
                  Text(
                    'Video de demostración: Big Buck Bunny',
                    style: TextStyle(
                      color: Colors.white70,
                      fontSize: 14,
                    ),
                  ),
                  Text(
                    'Fuente: Google Cloud Storage',
                    style: TextStyle(
                      color: Colors.white70,
                      fontSize: 14,
                    ),
                  ),
                  SizedBox(height: 8),
                  Text(
                    'Nuevas funcionalidades:',
                    style: TextStyle(
                      color: Colors.white,
                      fontSize: 14,
                      fontWeight: FontWeight.w600,
                    ),
                  ),
                  Text(
                    '• SharePlay para iOS (compartir en tiempo real)',
                    style: TextStyle(
                      color: Colors.white70,
                      fontSize: 12,
                    ),
                  ),
                  Text(
                    '• Google Cast para Android (Chromecast)',
                    style: TextStyle(
                      color: Colors.white70,
                      fontSize: 12,
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  /// Construye una tarjeta de característica con diseño personalizado
  ///
  /// Crea una tarjeta visual que muestra una característica del reproductor
  /// con un icono, título y descripción.
  ///
  /// Parámetros:
  /// - [icon]: Icono de Material Design que representa la característica
  /// - [title]: Título principal de la característica
  /// - [description]: Descripción detallada de la funcionalidad
  /// - [color]: Color temático para el borde, icono y fondo del icono
  ///
  /// Retorna un [Widget] con diseño moderno que incluye:
  /// - Bordes redondeados con color temático
  /// - Icono con fondo circular semi-transparente
  /// - Texto con jerarquía visual clara
  Widget _buildFeatureCard({
    required IconData icon,
    required String title,
    required String description,
    required Color color,
  }) {
    return Container(
      padding: const EdgeInsets.all(20),
      decoration: BoxDecoration(
        color: const Color(0xFF2D2D2D),
        borderRadius: BorderRadius.circular(12),
        border: Border.all(
          color: color.withOpacity(0.3),
          width: 1,
        ),
      ),
      child: Row(
        children: [
          Container(
            padding: const EdgeInsets.all(12),
            decoration: BoxDecoration(
              color: color.withOpacity(0.2),
              borderRadius: BorderRadius.circular(12),
            ),
            child: Icon(
              icon,
              color: color,
              size: 24,
            ),
          ),
          const SizedBox(width: 16),
          Expanded(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(
                  title,
                  style: const TextStyle(
                    color: Colors.white,
                    fontSize: 16,
                    fontWeight: FontWeight.w600,
                  ),
                ),
                const SizedBox(height: 4),
                Text(
                  description,
                  style: const TextStyle(
                    color: Colors.white70,
                    fontSize: 14,
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
1
likes
0
points
28
downloads

Publisher

unverified uploader

Weekly Downloads

Un reproductor de video avanzado para Flutter con controles modernos, Picture-in-Picture, Google Cast, AirPlay y diseño personalizable.

Repository (GitHub)
View/report issues

Documentation

Documentation

License

unknown (license)

Dependencies

flutter, qr_flutter, url_launcher, video_player

More

Packages that depend on advanced_video_player

Packages that implement advanced_video_player