【发布时间】:2022-01-15 06:45:38
【问题描述】:
对于使用 preload_page_view 包的上述问题有类似的答案,但我遇到了问题。
我尝试了以下两种有包和无包的方法
带包装:
return Scaffold(
body: PreloadPageView.builder(
controller: _controller,
preloadPagesCount: 3,
scrollDirection: Axis.vertical,
itemCount: 10,
itemBuilder: (context, i) {
return VideoInit(
index: i,
videoUrl: sampleVideo[i],
);
}),
);
没有包,我做了这个技巧:通过提供 viewportFraction
return Scaffold(
body: PageView.builder(
allowImplicitScrolling: true,
controller: PageController(viewportFraction: 0.999),
itemCount: 3,
itemBuilder: (context, i) {
return VideoInit(
index: i,
videoUrl: sampleVideo[i],
);
}),
);
视频播放器的代码是:
late VideoPlayerController _controller;
bool initialized = false;
initiliazeVideo() {
_controller = VideoPlayerController.network(
widget.videoUrl)
..initialize().then((_) {
if (mounted) {
setState(() {
_controller.setLooping(true);
_controller.pause();
initialized = true;
});
}
});
}
@override
void initState() {
initiliazeVideo();
super.initState();
}
@override
void dispose() {
if (initialized) {
initialized = false;
_controller.dispose();
}
super.dispose();
}
@override
Widget build(BuildContext context) {
return VisibilityDetector(
onVisibilityChanged: (info) {
if (info.visibleFraction > 0.5) {
if (initialized) {
_controller.play();
}
} else if (info.visibleFraction < 0.4) {
if (initialized) {
_controller.pause();
_controller.seekTo(Duration.zero);
}
}
},
key: UniqueKey(),
child: initialized
? SizedBox.expand(
child: FittedBox(
fit: BoxFit.cover,
child: SizedBox(
width: _controller.value.size.width,
height: _controller.value.size.height,
child: VideoPlayer(_controller),
),
),
)
: const Center(child: CircularProgressIndicator()),
);
上述方法的问题是当用户尝试使用音量按钮并滑动音量指示器来调整android上的音量时,视频开始滞后
https://www.dropbox.com/s/z7t2fvszd8p9f2y/VID_20220115124459.mp4?dl=0
有什么替代方法可以解决这个问题?
编辑/更新
如果我什至使用 listViewBuilder,就会出现滞后。如果页面视图或列表视图中有单个视频,则不存在此类问题。我认为这是因为多个视频控制器的初始化。
对于实现所需目标的替代方法有什么建议吗?
【问题讨论】:
-
问题可能与 PageView 本身无关,但 VideoPlayer - 你检查它是否在没有 PageView 的情况下滞后?
-
如果我使用 listViewBuilder,就会出现滞后。如果页面视图或列表视图中有单个视频,则不存在此类问题。我认为这是因为多个视频控制器的初始化。 @mfkw1
标签: flutter dart flutter-dependencies flutter-video-player