Files
fuckKomet/lib/full_screen_video_player.dart
2025-11-15 20:06:40 +03:00

117 lines
3.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<FullScreenVideoPlayer> createState() => _FullScreenVideoPlayerState();
}
class _FullScreenVideoPlayerState extends State<FullScreenVideoPlayer> {
VideoPlayerController? _videoPlayerController;
ChewieController? _chewieController;
bool _isLoading = true;
bool _hasError = false;
@override
void initState() {
super.initState();
_initializePlayer();
}
Future<void> _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),
),
),
);
}
}