Я использую пакет flutter video_player для воспроизведения короткого видеофайла, используемого в моем приложении. Из вдохновленной поваренной книги я вдохновился: Воспроизведение и приостановка видео .
Я хотел бы разрешить пользователю нажимать на видео, чтобы перезапустить его с самого начала. Поэтому я обернул VideoPlayer GestureDetector .
У меня в настоящее время есть следующий код:
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();
}
},
);
}
}
Видео воспроизводится хорошо после того, как видео файл загружен (после того, как состояние соединения передано выполненному), однако, когда я пытаюсь нажать на видео, чтобы воспроизвести его во второй раз, оно не воспроизводит видео с самого начала. Звук начинает воспроизводиться снова, но видео не возобновляется. Есть идеи?
РЕДАКТИРОВАТЬ 1
Следуя предложению @ marcosboaventura , я попытался обернуть вызовы в setState , чтобы снова запустите метод сборки:
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: GestureDetector(
onTap: () async {
await _controller.seekTo(Duration.zero);
setState(() {
_controller.play();
});
},
child: VideoPlayer(_controller),
),
);
Но видео все равно не воспроизводится, только звук. Любая другая идея?