loadUri method

Future<Duration?> loadUri(
  1. Uri uri,
  2. Duration? initialPosition
)

Loads audio from uri and returns the duration of the loaded audio if known.

Implementation

Future<Duration?> loadUri(
    final Uri uri, final Duration? initialPosition) async {
  transition(ProcessingStateMessage.loading);
  final src = uri.toString();
  if (src != _audioElement.src) {
    _durationCompleter = Completer<dynamic>();
    _audioElement.src = src;
    _audioElement.playbackRate = _speed;
    _audioElement.preload = 'auto';
    _audioElement.load();
    if (initialPosition != null) {
      _audioElement.currentTime = initialPosition.inMilliseconds / 1000.0;
    }
    try {
      await _durationCompleter!.future;
    } on MediaError catch (e) {
      throw PlatformException(
          code: "${e.code}", message: "Failed to load URL");
    } finally {
      _durationCompleter = null;
    }
  }
  transition(ProcessingStateMessage.ready);
  final seconds = _audioElement.duration;
  return seconds.isFinite
      ? Duration(milliseconds: (seconds * 1000).toInt())
      : null;
}