@ -30,10 +30,10 @@ class VideoViewerPage extends HookConsumerWidget {
@ override
Widget build ( BuildContext context , WidgetRef ref ) {
if ( asset . isLoca l) {
if ( asset . storage = = AssetState . local & & asset . livePhotoVideoId = = nul l) {
final AsyncValue < File > videoFile = ref . watch ( _fileFamily ( asset . local ! ) ) ;
return videoFile . when (
data: ( data ) = > Video Thumbnail Player(
data: ( data ) = > Video Player(
file: data ,
isMotionVideo: false ,
onVideoEnded: ( ) { } ,
@ -59,7 +59,7 @@ class VideoViewerPage extends HookConsumerWidget {
return Stack (
children: [
Video Thumbnail Player(
Video Player(
url: videoUrl ,
jwtToken: Store . get ( StoreKey . accessToken ) ,
isMotionVideo: isMotionVideo ,
@ -85,7 +85,7 @@ final _fileFamily =
return file ;
} ) ;
class Video Thumbnail Player extends StatefulWidget {
class Video Player extends StatefulWidget {
final String ? url ;
final String ? jwtToken ;
final File ? file ;
@ -95,7 +95,7 @@ class VideoThumbnailPlayer extends StatefulWidget {
final Function ( ) ? onPlaying ;
final Function ( ) ? onPaused ;
const Video Thumbnail Player( {
const Video Player( {
Key ? key ,
this . url ,
this . jwtToken ,
@ -107,10 +107,10 @@ class VideoThumbnailPlayer extends StatefulWidget {
} ) : super ( key: key ) ;
@ override
State < Video Thumbnail Player> createState ( ) = > _Video Thumbnail PlayerState( ) ;
State < Video Player> createState ( ) = > _Video PlayerState( ) ;
}
class _Video Thumbnail PlayerState extends State < Video Thumbnail Player> {
class _Video PlayerState extends State < Video Player> {
late VideoPlayerController videoPlayerController ;
ChewieController ? chewieController ;
@ -120,14 +120,17 @@ class _VideoThumbnailPlayerState extends State<VideoThumbnailPlayer> {
initializePlayer ( ) ;
videoPlayerController . addListener ( ( ) {
if ( videoPlayerController . value . isPlaying ) {
widget . onPlaying ? . call ( ) ;
} else if ( ! videoPlayerController . value . isPlaying ) {
widget . onPaused ? . call ( ) ;
}
if ( videoPlayerController . value . position = =
videoPlayerController . value . duration ) {
widget . onVideoEnded ( ) ;
if ( videoPlayerController . value . isInitialized ) {
if ( videoPlayerController . value . isPlaying ) {
widget . onPlaying ? . call ( ) ;
} else if ( ! videoPlayerController . value . isPlaying ) {
widget . onPaused ? . call ( ) ;
}
if ( videoPlayerController . value . position = =
videoPlayerController . value . duration ) {
widget . onVideoEnded ( ) ;
}
}
} ) ;
}
@ -145,14 +148,14 @@ class _VideoThumbnailPlayerState extends State<VideoThumbnailPlayer> {
_createChewieController ( ) ;
setState ( ( ) { } ) ;
} catch ( e ) {
debugPrint ( " ERROR initialize video player " ) ;
debugPrint ( " ERROR initialize video player $ e " ) ;
}
}
_createChewieController ( ) {
chewieController = ChewieController (
controlsSafeAreaMinimum: const EdgeInsets . only (
bottom: 1 56 ,
bottom: 1 00 ,
) ,
showOptions: true ,
showControlsOnInitialize: false ,
@ -160,6 +163,7 @@ class _VideoThumbnailPlayerState extends State<VideoThumbnailPlayer> {
autoPlay: true ,
autoInitialize: true ,
allowFullScreen: true ,
allowedScreenSleep: false ,
showControls: ! widget . isMotionVideo ,
hideControlsTimer: const Duration ( seconds: 5 ) ,
) ;
@ -175,20 +179,22 @@ class _VideoThumbnailPlayerState extends State<VideoThumbnailPlayer> {
@ override
Widget build ( BuildContext context ) {
return chewieController ? . videoPlayerController . value . isInitialized = = true
? SizedBox (
child: Chewie (
controller: chewieController ! ,
) ,
)
: const Center (
child: SizedBox (
width: 75 ,
height: 75 ,
child: CircularProgressIndicator . adaptive (
strokeWidth: 2 ,
) ,
) ,
) ;
if ( chewieController ? . videoPlayerController . value . isInitialized = = true ) {
return SizedBox (
child: Chewie (
controller: chewieController ! ,
) ,
) ;
} else {
return const Center (
child: SizedBox (
width: 75 ,
height: 75 ,
child: CircularProgressIndicator . adaptive (
strokeWidth: 2 ,
) ,
) ,
) ;
}
}
}