编辑:我刚开始学习颤振,我还有很多东西要学。现在,我很难找到重放视频的方法。我的目标是重播一个视频,当它完成,并显示一个重播图标供用户点击。这是我唯一进口的包。
import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart'; Widget _buildVideoPlay() {
return Center(
child: _controller.value.initialized ? _VideoStack() : Container(),
);
}
Widget _VideoStack() {
return Stack(
children: [
_VideoCore(),
FlatButton(
onPressed: () => setState(() {
_controller.value.isPlaying ? _controller.initialize() : _controller.pause()
}),
child: Center(
child: _controller.value.isPlaying
? Icon(Icons.pause, color: Colors.blue, size: 30.0)
: Icon(Icons.play_arrow, color: Colors.blue, size: 30.0),
),
],
);
}
Widget _VideoCore() {
return Container(
child: Center(
child: AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
),
),
);
}发布于 2020-08-19 06:31:33
在这种情况下,如果当前位置的持续时间等于视频的持续时间,则将finishedPlaying设置为true。然后使用此布尔值显示重播按钮。
bool finishedPlaying = false;
@override
void initState() {
super.initState();
_controller.addListener(() {
setState(() {
});
if (_controller.value.duration == _controller.value.position) {
setState(() {
finishedPlaying = true;
});
}
});
}FlatButton(
onPressed: () => setState(() {
if (finishedPlaying) {
_controller.play(); // Replay the video
} else {
_controller.value.isPlaying
? _controller.play()
: _controller.pause();
}
}),
child: Center(
child: finishedPlaying
? Icon(Icons.replay, color: Colors.blue, size: 30.0)
: (_controller.value.isPlaying
? Icon(Icons.pause, color: Colors.blue, size: 30.0)
: Icon(Icons.play_arrow,
color: Colors.blue, size: 30.0)))),发布于 2020-08-19 07:59:27
我不是你的意思,你的回答是不是像循环?你可以试试这个
IconButton(
icon: Icon(
Icons.loop,
color: _controller.value.isLooping
? Colors.green
: Colors.black,
),
onPressed: () {
_controller.setLooping(!_controller.value.isLooping);
})发布于 2022-10-10 17:44:40
bool isPlay = false;
bool finishedPlaying = false;
@override
void initState() {
super.initState();
videoPlayerController.addListener(() {
setState(() {
});
if (videoPlayerController.value.duration == videoPlayerController.value.position) {
setState(() {
isPlay = false;
finishedPlaying = true;
});
} else {
setState(() {
finishedPlaying = false;
});
}
});}
Stack(
children: [
CachedVideoPlayer(videoPlayerController),
Align(
alignment: Alignment.center,
child: IconButton(
onPressed: () {
if (finishedPlaying) {
videoPlayerController.seekTo(Duration.zero);
videoPlayerController.play(); // Replay the video
}
if (isPlay) {
videoPlayerController.pause();
} else {
videoPlayerController.play();
}
setState(() {
isPlay = !isPlay;
});
},
icon: Icon(
finishedPlaying
? Icons.replay
: isPlay
? Icons.pause_circle
: Icons.play_circle,
size: 30,
),
),
),
],
),https://stackoverflow.com/questions/63480755
复制相似问题