seekBy method
if by > 0 Forward (jump) the current audio, to currentPosition + by
(duration)
eg: _assetsAudioPlayer.foward(Duration(seconds: 10))
Rewind (jump) the current audio, to currentPosition - by
(duration)
eg: _assetsAudioPlayer.rewind(Duration(seconds: 10))
Implementation
Future<void> seekBy(Duration by) async {
// only if playing a song
final playing = current.valueOrNull;
if (playing != null) {
final totalDuration = playing.audio.duration;
final currentPosition = this.currentPosition.valueOrNull ?? Duration();
if (by.inMilliseconds >= 0) {
final nextPosition = currentPosition + by;
// don't seek more that song duration
final currentPositionCapped = Duration(
milliseconds:
min(totalDuration.inMilliseconds, nextPosition.inMilliseconds),
);
await seek(currentPositionCapped);
} else {
// only if playing a song
final currentPosition = this.currentPosition.valueOrNull ?? Duration();
final nextPosition = currentPosition + by;
// don't seek less that 0
final currentPositionCapped = Duration(
milliseconds: max(0, nextPosition.inMilliseconds),
);
await seek(currentPositionCapped);
}
}
}