我正在使用flutter video_player包在我的应用程序中播放短视频文件。我受到了flutter食谱的启发:播放和暂停视频。
我希望用户可以点击视频以从头开始重新播放。因此,我用GestureDetector包装了VideoPlayer。
我目前有以下代码:
视频文件加载后(连接状态通过done),视频播放效果很好,但是当我尝试再次点击视频重播时,它不会从头开始重新播放视频。音频开始重新播放,但视频没有重新开始播放。有任何想法吗?
编辑1
根据@marcosboaventura的建议,我尝试在setState中包装调用以触发重新构建方法:
我希望用户可以点击视频以从头开始重新播放。因此,我用GestureDetector包装了VideoPlayer。
我目前有以下代码:
class MyVideoPlayer extends StatefulWidget {
final File videoFile;
MyVideoPlayer({Key key, this.videoFile}) : super(key: key);
@override
_MyVideoPlayerState createState() => _MyVideoPlayerState();
}
class _MyVideoPlayerState extends State<MyVideoPlayer> {
VideoPlayerController _controller;
Future<void> _initializeVideoPlayerFuture;
@override
void initState() {
_controller = VideoPlayerController.file(widget.videoFile);
_initializeVideoPlayerFuture = _controller.initialize();
super.initState();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
print(snapshot.connectionState);
if (snapshot.connectionState == ConnectionState.done) {
// Play video once it's loaded
_controller.play();
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: GestureDetector(
onTap: () async {
await _controller.seekTo(Duration.zero);
_controller.play();
},
child: VideoPlayer(_controller),
),
);
} else {
return CircularProgressIndicator();
}
},
);
}
}
视频文件加载后(连接状态通过done),视频播放效果很好,但是当我尝试再次点击视频重播时,它不会从头开始重新播放视频。音频开始重新播放,但视频没有重新开始播放。有任何想法吗?
编辑1
根据@marcosboaventura的建议,我尝试在setState中包装调用以触发重新构建方法:
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: GestureDetector(
onTap: () async {
await _controller.seekTo(Duration.zero);
setState(() {
_controller.play();
});
},
child: VideoPlayer(_controller),
),
);
但是视频仍然无法回放,只有声音。还有其他的想法吗?