import 'package:flutter/material.dart'; import 'package:video_player/video_player.dart'; import 'package:chewie/chewie.dart'; class FullScreenVideoPlayer extends StatefulWidget { final String videoUrl; const FullScreenVideoPlayer({Key? key, required this.videoUrl}) : super(key: key); @override State createState() => _FullScreenVideoPlayerState(); } class _FullScreenVideoPlayerState extends State { VideoPlayerController? _videoPlayerController; ChewieController? _chewieController; bool _isLoading = true; bool _hasError = false; @override void initState() { super.initState(); _initializePlayer(); } Future _initializePlayer() async { try { _videoPlayerController = VideoPlayerController.networkUrl( Uri.parse(widget.videoUrl), httpHeaders: const { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', }, ); await _videoPlayerController!.initialize(); _chewieController = ChewieController( videoPlayerController: _videoPlayerController!, aspectRatio: _videoPlayerController!.value.aspectRatio, autoPlay: true, // Начинаем воспроизведение сразу looping: false, // Не зацикливаем showControls: true, // Показываем стандартные элементы управления Chewie materialProgressColors: ChewieProgressColors( playedColor: Colors.red, handleColor: Colors.blueAccent, backgroundColor: Colors.grey, bufferedColor: Colors.white, ), ); if (mounted) { setState(() { _isLoading = false; }); } } catch (e) { print('❌ [FullScreenVideoPlayer] Error initializing Chewie player: $e'); if (mounted) { setState(() { _hasError = true; _isLoading = false; }); } } } @override void dispose() { _videoPlayerController?.dispose(); _chewieController?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black, // Черный фон для полноэкранного видео appBar: AppBar( backgroundColor: Colors.black, iconTheme: const IconThemeData(color: Colors.white), title: const Text('Видео', style: TextStyle(color: Colors.white)), ), body: Center( child: _isLoading ? const CircularProgressIndicator(color: Colors.white) : _hasError ? const Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.error_outline, color: Colors.red, size: 50), SizedBox(height: 10), Text( 'Не удалось загрузить видео.', style: TextStyle(color: Colors.white, fontSize: 16), ), Text( 'Проверьте интернет или попробуйте позже.', style: TextStyle(color: Colors.white70, fontSize: 12), ), ], ) : _chewieController != null && _chewieController!.videoPlayerController.value.isInitialized ? Chewie(controller: _chewieController!) : const Text( 'Ошибка плеера', style: TextStyle(color: Colors.white), ), ), ); } }