flutter无法配置videoPlayerContoroller

问题描述 投票:1回答:1

我有这样的视频播放器

 String url;
 var plan;
_VideoPlayerScreenState(this.url,{this.plan});


 Future<Null> OnWillPop(){

_controller.dispose();

if(plan!=null)
Navigator.push(context, MaterialPageRoute(builder: (context)=>
ListSession(plan :plan)));
else
  Navigator.push(context, MaterialPageRoute(builder: (context)=>
ListMoves()));

}
VideoPlayerController _controller;
Future<void> _initializeVideoPlayerFuture;

@override
void initState() {

 _controller = VideoPlayerController.network(
  url,
 );

// Initialize the controller and store the Future for later use.
_initializeVideoPlayerFuture = _controller.initialize();

// Use the controller to loop the video.
_controller.setLooping(true);
_controller.play();
super.initState();
}

@override
void dispose() {
 print("---------------------+++++++++++++++++++++++----------------------++++++++++++++++++++");
_controller.dispose();

 super.dispose();
}


 @override
 Widget build(BuildContext context) {
 return WillPopScope(onWillPop: OnWillPop,child:Scaffold(

   // Use a FutureBuilder to display a loading spinner while waiting for the
   // VideoPlayerController to finish initializing.
   body: FutureBuilder(
    future: _initializeVideoPlayerFuture,
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.done) {
        // If the VideoPlayerController has finished initialization, use
        // the data it provides to limit the aspect ratio of the video.
        return Center(
          child: AspectRatio(
            aspectRatio: _controller.value.aspectRatio,
            // Use the VideoPlayer widget to display the video.
            child: VideoPlayer(_controller),
          ),
        );
      } else {
        // If the VideoPlayerController is still initializing, show a
        // loading spinner.
        return Center(child: CircularProgressIndicator());
      }
    },
  ),
  // This trailing comma makes auto-formatting nicer for build methods.
 ));
}

但是当我按下返回按钮时出现此错误

Another exception was thrown: A VideoPlayerController was used after being disposed.

我以多种方式进行测试,但是不处理如何处置videoplayerContoroller id删除onWillPop方法中的处置,但不处置视频的处理方式请尽快帮助我,我需要帮助我进行多种测试,但是不起作用如何处理videoplayerContoroller id删除onWillPop方法中的处理方法,但不要处理视频的处理方法]

flutter dart dispose
1个回答
0
投票

您可以在下面复制粘贴运行完整代码并取消标记Navigator.push / Navigator.pushReplacement以检查效果在这种情况下,您不需要处理controller,因为controller在此页面上是本地的,所以您只需执行_controller.pause()您使用Navigator.push转到下一页意味着您将从下一页pop如果您成功地将dispose controller设置为controller,则当从下一页弹出时,会出现错误,因为不会再次调用null,也不会再次初始化initState

如果使用controller,则将自动调用Navigator.pushReplacement,您可以在演示代码中看到console show _controller.dispose。

工作演示您可以从dispose页面上看到返回的视频,仍然可以播放

ListMove

完整代码

enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.