loadUri method
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.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;
}