import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:video_player/video_player.dart'; import 'package:chewie/chewie.dart'; class VideoPlayerWidget extends StatefulWidget { final Uint8List? videoBytes; final String? filePath; const VideoPlayerWidget({ super.key, this.videoBytes, this.filePath, }) : assert(videoBytes != null || filePath != null); @override State createState() => _VideoPlayerWidgetState(); } class _VideoPlayerWidgetState extends State { VideoPlayerController? _videoPlayerController; ChewieController? _chewieController; bool _isInitialized = false; @override void initState() { super.initState(); _initializePlayer(); } Future _initializePlayer() async { try { if (widget.videoBytes != null) { _videoPlayerController = VideoPlayerController.contentUri( Uri.dataFromBytes( widget.videoBytes!, mimeType: 'video/mp4', ), ); } else if (widget.filePath != null) { _videoPlayerController = VideoPlayerController.file(File(widget.filePath!)); } if (_videoPlayerController != null) { await _videoPlayerController!.initialize(); _chewieController = ChewieController( videoPlayerController: _videoPlayerController!, autoPlay: false, looping: false, showControls: true, allowFullScreen: false, allowMuting: true, ); setState(() { _isInitialized = true; }); } } catch (e) { print('Error initializing video player: $e'); } } @override void dispose() { _videoPlayerController?.dispose(); _chewieController?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { if (!_isInitialized) { return const Center( child: CircularProgressIndicator(), ); } if (_chewieController == null) { return const Center( child: Icon(Icons.videocam_off, color: Colors.white), ); } return Chewie( controller: _chewieController!, ); } }