ERM Channel Video changes
							parent
							
								
									cdd56b2a5a
								
							
						
					
					
						commit
						2682158590
					
				| @ -0,0 +1,105 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:video_player/video_player.dart'; | ||||
| 
 | ||||
| class MyVideoProgressIndicator extends StatefulWidget { | ||||
|   const MyVideoProgressIndicator( | ||||
|     this.controller, { | ||||
|     Key? key, | ||||
|     this.colors = const VideoProgressColors(), | ||||
|     required this.allowScrubbing, | ||||
|     this.padding = const EdgeInsets.only(top: 5.0), | ||||
|   }) : super(key: key); | ||||
| 
 | ||||
|   final VideoPlayerController controller; | ||||
| 
 | ||||
|   final VideoProgressColors colors; | ||||
| 
 | ||||
|   final bool allowScrubbing; | ||||
| 
 | ||||
|   final EdgeInsets padding; | ||||
| 
 | ||||
|   @override | ||||
|   State<MyVideoProgressIndicator> createState() => _VideoProgressIndicatorState(); | ||||
| } | ||||
| 
 | ||||
| class _VideoProgressIndicatorState extends State<MyVideoProgressIndicator> { | ||||
|   _VideoProgressIndicatorState() { | ||||
|     listener = () { | ||||
|       if (!mounted) { | ||||
|         return; | ||||
|       } | ||||
|       setState(() {}); | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|   late VoidCallback listener; | ||||
| 
 | ||||
|   VideoPlayerController get controller => widget.controller; | ||||
| 
 | ||||
|   VideoProgressColors get colors => widget.colors; | ||||
| 
 | ||||
|   @override | ||||
|   void initState() { | ||||
|     super.initState(); | ||||
|     controller.addListener(listener); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   void deactivate() { | ||||
|     controller.removeListener(listener); | ||||
|     super.deactivate(); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     Widget progressIndicator; | ||||
|     if (controller.value.isInitialized) { | ||||
|       int duration = controller.value.duration.inMilliseconds; | ||||
|       int position = controller.value.position.inMilliseconds; | ||||
| 
 | ||||
|       int maxBuffering = 0; | ||||
|       for (DurationRange range in controller.value.buffered) { | ||||
|         int end = range.end.inMilliseconds; | ||||
|         if (end > maxBuffering) { | ||||
|           maxBuffering = end; | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       progressIndicator = Stack( | ||||
|         fit: StackFit.passthrough, | ||||
|         children: <Widget>[ | ||||
|           LinearProgressIndicator( | ||||
|             value: maxBuffering / duration, | ||||
|             valueColor: AlwaysStoppedAnimation<Color>(colors.bufferedColor), | ||||
|             backgroundColor: colors.backgroundColor, | ||||
|             minHeight: 8, | ||||
|           ), | ||||
|           LinearProgressIndicator( | ||||
|             value: position / duration, | ||||
|             valueColor: AlwaysStoppedAnimation<Color>(colors.playedColor), | ||||
|             backgroundColor: Colors.transparent, | ||||
|             minHeight: 8, | ||||
|           ), | ||||
|         ], | ||||
|       ); | ||||
|     } else { | ||||
|       progressIndicator = LinearProgressIndicator( | ||||
|         valueColor: AlwaysStoppedAnimation<Color>(colors.playedColor), | ||||
|         backgroundColor: colors.backgroundColor, | ||||
|         minHeight: 8, | ||||
|       ); | ||||
|     } | ||||
|     Widget paddedProgressIndicator = Padding( | ||||
|       padding: widget.padding, | ||||
|       child: progressIndicator, | ||||
|     ); | ||||
|     if (widget.allowScrubbing) { | ||||
|       return VideoScrubber( | ||||
|         controller: controller, | ||||
|         child: paddedProgressIndicator, | ||||
|       ); | ||||
|     } else { | ||||
|       return paddedProgressIndicator; | ||||
|     } | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue