play method

  1. @override
Future<bool> play(
  1. String? url
)
override

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;
}