I want to print the video's current playback time in seconds. but it's printing 4 times every second I think. here's videoPlayerController.addListener code.
await videoPlayerController.initialize().then((value) => {
videoPlayerController.addListener(
() {
log(videoPlayerController.value.position.inSeconds.toString);
},
)
});
I want this videoPlayerController.value.position.inSeconds log will show only once in a second.
full code
void _initVideoPlayer() async {
var url = await _extractVideoUrl();
log('url $url');
videoPlayerController = VideoPlayerController.network(url);
await videoPlayerController.initialize().then((value) => {
videoPlayerController.addListener(
() {
log(videoPlayerController.value.position.inSeconds.toString);
},
)
});
chewieController = ChewieController(
videoPlayerController: videoPlayerController,
autoPlay: true,
looping: false,
allowedScreenSleep: false,
allowFullScreen: true,
showControls: true,
startAt: _reStoreLastPosition(),
errorBuilder: (context, errorMessage) {
return Center(
child: Text(
errorMessage,
style: const TextStyle(color: Colors.white),
),
);
},
);
setState(() {});
}
The listener will keep listening to the video's position without considering the time.. You can do this instead
void _initVideoPlayer() async {
var url = await _extractVideoUrl();
log('url $url');
String lastLoggedTime = "";//<--add a variable here
videoPlayerController = VideoPlayerController.network(url);
await videoPlayerController.initialize().then((value) => {
videoPlayerController.addListener(
() {
if(lastLoggedTime != videoPlayerController.value.position.inSeconds.toString()){
lastLoggedTime = videoPlayerController.value.position.inSeconds.toString(); //<--save it here
log(videoPlayerController.value.position.inSeconds.toString());
}
},
)
});
chewieController = ChewieController(
videoPlayerController: videoPlayerController,
autoPlay: true,
looping: false,
allowedScreenSleep: false,
allowFullScreen: true,
showControls: true,
startAt: _reStoreLastPosition(),
errorBuilder: (context, errorMessage) {
return Center(
child: Text(
errorMessage,
style: const TextStyle(color: Colors.white),
),
);
},
);
setState(() {});
}