Initial Commit

This commit is contained in:
ivan2282
2025-11-15 20:06:40 +03:00
commit 205d11df0d
233 changed files with 52572 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
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),
),
),
);
}
}