我用providervideo_player来管理这个州.

视频Provider :

videoPlayerController = VideoPlayerController.network(...);

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

之前的视频是否由GC处理?这有什么性能问题吗?我想在切换到新的视频之前go 掉以前的视频和使用的资源.切换前我不能videoPlayerController.dispose(),因为这会导致错误.

推荐答案

当您呼叫dispose时,VideoPlayer部件仍在使用您的控制器.首先,您需要确保不再使用它(将control in state设置为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相关问答推荐

Cupertino Buttino SheetAction on按下可触发加载指示器,然后勾选并延迟

类型flatter doctor get zsh:未找到命令:macO中flatter

Flutter ReorderableListView在可滚动父级中无法完美工作

如何让一个名为ONTAP的回调函数、另一个名为onTapDown的回调函数和另一个名为onTapUp的回调函数不重叠?

为什么Riverpod生成器在这种情况下不生成AsyncNotiator?

如何将Xpriter代码页更改为代码页27?

Ffltter:发布版本中的Path NotFoundException

缩短经常使用的行Theme.of(context).colorScheme

Flex ListView用于可滚动和响应的页面

将列表<;Events>;从Flutter 应用程序中的函数传回EventLoader属性时出错

框中的Flutter 适配图像

Flutter :URI的目标不存在

如何从文本比例因子迁移到文本比例因子

Dart:未捕获错误:RangeError(索引):索引超出范围:索引应小于 7:7

如果有空间则居中CustomScrollView

Riverpod 2.3.6:AutoDisposeNotifier和ref.onDispose自动处理

如何与 PostgreSQL 和外部网站交互 flutter apk?

graphql_flutter 错误:非抽象类GraphQLWebSocketChannel缺少实现

如何按值对列表中的 map 进行排序

Flutter 中的 Firebase 后台消息处理程序产生重复的隔离并运行应用程序两次