playMedia method

Future playMedia(
  1. Media? media
)

Implementation

Future playMedia(Media? media) {
  if (_current?.url == media?.url) {
    return Future.value(true);
  }

  _current = media;

  _videoPlayerController?.pause();
  _videoPlayerController?.dispose();
  _videoPlayerController = null;

  _audioPlayer?.stop();
  _audioPlayer?.dispose();
  _audioPlayer = null;

  this.media?.add(media!);

  if (media!.type == MediaType.audio) {
    _audioPlayer = audio_player.AudioPlayer();
    _audioPlayer?.setPlayerMode(audio_player.PlayerMode.mediaPlayer);
    _audioPlayer!
        .play(audio_player.UrlSource(media.url!))
        .then((value) => notifyListeners());
    _audioPlayer?.onPlayerStateChanged.listen((event) {
      if (event == audio_player.PlayerState.completed) {
        playNext();
      }
    });
    _subscribeToTimeEventsForMedia(media);
  } else if (media.type == MediaType.video) {
    _videoPlayerController =
        VideoPlayerController.networkUrl(Uri.parse(media.url!));
    _videoPlayerController!.setVolume(1.0);
    _videoPlayerController!.addListener(() {});
    return _videoPlayerController!.initialize().then((value) {
      _videoPlayerController!.play().then((value) => notifyListeners());
      _subscribeToTimeEventsForMedia(media);
    });
  }

  return Future.value(null);
}