seekBy method

Future<void> seekBy(
  1. Duration by
)

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);
    }
  }
}