import 'dart:io'; import 'package:flutter/material.dart'; import 'package:photo_gallery/photo_gallery.dart'; import 'package:video_player/video_player.dart'; class VideoProvider extends StatefulWidget { final String mediumId; const VideoProvider({ required this.mediumId, }); @override _VideoProviderState createState() => _VideoProviderState(); } class _VideoProviderState extends State { VideoPlayerController? _controller; File? _file; @override void initState() { WidgetsBinding.instance.addPostFrameCallback((_) { initAsync(); }); super.initState(); } Future initAsync() async { try { _file = await PhotoGallery.getFile(mediumId: widget.mediumId); _controller = VideoPlayerController.file(_file!); _controller?.initialize().then((_) { // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed. setState(() {}); }); } catch (e) { print("Failed : $e"); } } @override Widget build(BuildContext context) { return _controller == null || !_controller!.value.isInitialized ? Container() : Column( mainAxisAlignment: MainAxisAlignment.center, children: [ AspectRatio( aspectRatio: _controller!.value.aspectRatio, child: VideoPlayer(_controller!), ), TextButton( onPressed: () { setState(() { _controller!.value.isPlaying ? _controller!.pause() : _controller!.play(); }); }, child: Icon( _controller!.value.isPlaying ? Icons.pause : Icons.play_arrow, ), ), ], ); } }