Flutter Video_Flutter+Chewie切换播放源泄漏问题解决
- 作者:
- 淡白
- 创建时间:
- Sep 24, 2020, 4:09:34 PM
- Flutter Flutter video_player 1,238
摘要:切换播放如果在上VideoPlayerController初始化完成之前初始化一个新的VideoPlayerController而上一个没有完成初始化无法销毁,则可能造成后台播放的问题.解决方案在切换一个新的VideoPlayerController之前先将其保存放到一个变量上,待初始化完成后销毁.
切换播放
如果在上VideoPlayerController
初始化完成之前初始化一个新的VideoPlayerController
而上一个没有完成初始化无法销毁,则可能造成后台播放的问题.
解决方案
在切换一个新的VideoPlayerController
之前先将其保存放到一个变量上,待初始化完成后销毁.
切换播放源:
if (_videoPlayerController == null) {
//初始化一个控制器
_initController(url);
} else {
//如果当前控制器不为空则把当前控制器保留到old变量在下一次刷新时销毁
final oldController = _videoPlayerController;
WidgetsBinding.instance.addPostFrameCallback((_) async {
await oldController.dispose();
});
setState(() {
_videoPlayerController = null;
_initController(url);
});
}
控制器初始化:
_initController(String link) {
_videoPlayerController = VideoPlayerController.network(link)
..initialize().then((_) {
_chewieController = ChewieController(
customControls: CustomControls(),
allowedScreenSleep: false,
videoPlayerController: _videoPlayerController,
aspectRatio: _videoPlayerController.value.aspectRatio,
autoPlay: true,
looping: true,
startAt: startTime);
setState(() {});
});
}
记得在页面销毁时先销毁播放否则也会造成泄漏
@override
dispose() {
super.dispose();
if(_videoPlayerController!=null){
_videoPlayerController.pause();
_videoPlayerController.dispose();
_videoPlayerController = null;
_chewieController = null;
}
}
完整解决:https://www.thetopsites.net/article/58955831.shtml