这是我的小部件的层次结构:
VideoPage
VideoPlayer
RelatedVideos
VideoItem1
VideoItem2
VideoItem3
每当单击VideoItem时,我都会导航到一个新的VideoPage。我的问题是VideoPlayer(Chewie)没有被处理掉,因此视频一直在后台播放。
我该如何处置VideoItem中的VideoPlayer小部件?
我尝试了Navigator.pushReplacement,但是后来我无法返回上一个视频。
这是处理导航的VideoItem小部件中的代码的片段(缩略图包裹有手势检测器,单击该手势可打开新页面):
GestureDetector(
onTap: (){
Navigator.push(context, MaterialPageRoute(
builder: (context) {
return VideoPage(
file: file,
thumbnail: thumbnail,
title: videoTitle,
id: id,
);
},
));
},
child: Container(
width: MediaQuery.of(context).size.width,
height: 200.0,
child: ExtendedImage.network(
thumbnail,
fit: BoxFit.fill,
cache: true,
)
),
)
答案 0 :(得分:2)
您是否在initState
的{{1}}内部创建控制器?如果是这样,请尝试将同一小部件中的VideoPage
覆盖到控制器的deactivate
和pause
。从dispose
离开时应该会发生这种情况。
然后,您可以通过将当前控制器与传入的旧窗口小部件控制器进行比较,尝试使用VideoPage
重新初始化在停用时处置的所有didUpdateWidget
。
controllers
有关在此处停用的信息:Deactivate
答案 1 :(得分:0)
您可以将控制器传递回另一个视图并进行处理:
Navigator.push(context, MaterialPageRoute(
builder: (context) {
return VideoPage(
file: file,
thumbnail: thumbnail,
title: videoTitle,
id: id,
);
},
)).then((List<ChewieController> controllers){
controllers.forEach((controller) => controller.dispose())
});