gpt4 book ai didi

Flutter video_player 配置

转载 作者:行者123 更新时间:2023-12-03 02:41:38 24 4
gpt4 key购买 nike

我正在使用 providervideo_player来管理状态。

VideoProvider 有:

videoPlayerController = VideoPlayerController.network(...);

当用户切换到新视频(同一屏幕)时,我经常更改它。如果我直接分配一个新的 VideoPlayerController.network(...)进入 videoPlayerController ,旧视频仍会播放,您可以听到声音。解决方法是 videoPlayerController.pause()然后分配一个新的 VideoPlayerCOntroller.network然后。

之前的 Video 是否被 GC 处理掉了?这有任何性能问题吗?我想在切换到新视频之前摆脱以前的视频和使用的资源。我不能 videoPlayerController.dispose()在切换之前,因为它会导致错误。

最佳答案

当您调用 dispose VideoPlayer 小部件仍在使用您的 Controller 。首先,您需要确保不再使用它(将状态中的 Controller 设置为 null)并且在您调用 dispose 之后。

我不确定您是否通过 Provider 进行状态管理,但我将举一个示例,说明如何使用常规状态执行此操作。

  VideoPlayerController _controller;

void _initController(String link) {
_controller = VideoPlayerController.network(link)
..initialize().then((_) {
setState(() {});
});
}

Future<void> _onControllerChange(String link) async {
if (_controller == null) {
// If there was no controller, just create a new one
_initController(link);
} else {
// If there was a controller, we need to dispose of the old one first
final oldController = _controller;

// Registering a callback for the end of next frame
// to dispose of an old controller
// (which won't be used anymore after calling setState)
WidgetsBinding.instance.addPostFrameCallback((_) async {
await oldController.dispose();

// Initing new controller
_initController(link);
});

// Making sure that controller is not used by setting it to null
setState(() {
_controller = null;
});
}
}

关于Flutter video_player 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58955831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com