我正在使用providerwithvideo_player来管理状态。
VideoProvider 具有:
videoPlayerController = VideoPlayerController.network(...);
Run Code Online (Sandbox Code Playgroud)
当用户切换到新视频(同一屏幕)时,我经常更改它。如果我直接分配一个新VideoPlayerController.network(...)的videoPlayerController,旧的视频仍然会播放,你可以听到声音。解决方法是videoPlayerController.pause()之后分配一个新的VideoPlayerCOntroller.network。
之前的Video是被GC处理了吗?这有任何性能问题吗?我想在切换到新视频之前摆脱以前的视频和使用的资源。videoPlayerController.dispose()在切换之前我不能,因为它会导致错误。
在这篇文章中:Flutter video_player dispose
我问如何处理一些东西,以便我可以再次使用它。提供的答案工作正常,但它给我留下了这个问题:
为什么这段代码按预期工作?例如,它处理旧实例videoController使用oldController
final oldController = videoController;
WidgetsBinding.instance.addPostFrameCallback((_) async {
await oldController.dispose();
_initController(link); //contains reassignment of videoController = VideoController.network(...)
});
Run Code Online (Sandbox Code Playgroud)
在 C 或类似语言中,需要使用指针(或者我应该说我的首选方式)。要传递引用,请为其分配一个新值,然后处理旧值。
是否有回调函数或方法可以知道Navigator.of(context).pop()返回上一屏幕的动画已完成?目前我正在使用await Future.delayed(Duration(milliseconds: 500));用来完成这个。有没有更好的办法?
我使用它showModalBottomSheet(useRootNavigator: true)然后Navigator.pop()关闭底部工作表,然后推新路线。
代码:
Navigator.of(context).pop();
await Future.delayed(Duration(milliseconds: 500));
Navigator.of(context).push(...) // push new screen
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何生成值的组合。
鉴于:
const items = ['a', 'b', 'c', 'd', 'e'];
Run Code Online (Sandbox Code Playgroud)
应该生成:
[
['a', 'b', 'c'],
['a', 'b', 'd'],
['a', 'b', 'e'],
['a', 'c', 'd'],
['a', 'c', 'e'],
['a', 'd', 'e'],
['b', 'c', 'd'],
['b', 'c', 'e'],
['c', 'd', 'e']
]
Run Code Online (Sandbox Code Playgroud)
它为数组中的所有项目生成唯一的组合。基本上,每个项目的数组长度是Math.round(items.length / 2)。
任何帮助将不胜感激。