zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

flutter video_player实现监听和自动播放下一首歌曲

flutter 实现 监听 Video player 歌曲 自动播放
2023-09-14 09:04:29 时间

参考
参考

我的做法是通过监听歌曲的当前位置和总的时长,注意监听的位置,歌曲初始化后开始播放了再进行监听,最后记得销毁

  @override
  void initState() {
    super.initState();

    if (_videoPlayerController != null) {
      //如果视频控制器存在,清理掉重新创建
      _videoPlayerController.removeListener(_videoListener);
      _videoPlayerController.dispose();
    }

    videoplay();

  }


  videoplay() {
    _videoPlayerController = VideoPlayerController.network(
        widget.videoList[curIndex])
      // _videoPlayerController = VideoPlayerController.file(File("/storage/emulated/0/DCIM/pipixia/eecd00a7e13145ff84568fe4e10ea982.mp4"))
      ..initialize().then((_) {
        // 确保在初始化视频后显示第一帧,直至在按下播放按钮。
        setState(() {
          _videoPlayerController.play();
        });
      });
    //可以播放就开始监听
    _videoPlayerController.addListener(_videoListener);
  }
  
  //监听的方法
  void _videoListener() {
    setState(() {
      var curPosition = _videoPlayerController.value.position;
      var totalPosition = _videoPlayerController.value.duration;
      curPos = curPosition.toString().substring(2, 7);
      // curPos=curPos.subString(0,2);
      totalPos = totalPosition.toString().substring(2, 7);
      print("当前位置${curPos},全部${totalPos}");
      //如果当前位置是最后的位置就跳到下一首歌
      if (curPosition.toString() != "0:00:00.000000" &&
          curPosition == totalPosition) {
        setState(() {
          curIndex++;
          if (curIndex >= widget.videoList.length) {
            //循环回到第一首
            curIndex = 0;
          }
          curId = widget.idList[curIndex];
          getCommentLists();
          videoplay();
        });
      }
    });
  }

  @override
  void dispose() {
    _videoPlayerController.dispose();
    _videoPlayerController.removeListener(_videoListener);
    _commentController.dispose();
    _focusNodeComment.dispose();
    super.dispose();
  }