play method
Implementation
@override
Future<bool> play(String? url) async {
// build new controller
var uri = URI.parse(url);
if (uri?.url == _controller?.dataSource) return true;
if (uri != null) {
// dispose of existing controller
_controller?.dispose();
// create new controller
_controller = VideoPlayerController.networkUrl(uri);
// wait for the controller to initialize
await _controller?.initialize();
// fire onInitialized() event
if (!isNullOrEmpty(widget.model.onInitialized)) {
WidgetsBinding.instance.addPostFrameCallback((_) => widget.model.onInitializedHandler());
}
// ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
if (mounted) {
setState(() {});
}
else {
WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {}));
}
_controller!.setLooping(widget.model.loop);
_controller!.setVolume(widget.model.volume);
_controller!.setPlaybackSpeed(widget.model.speed);
if (widget.model.autoplay) {
start();
}
// add listener to modify controls
_controller!.addListener(_onVideoControllerChange);
}
return true;
}