open method
Future<void>
open({
- required String path,
- required String audioType,
- String? package,
- bool autoStart = false,
- double volume = 1,
- double? seek,
- double? playSpeed,
- Map? networkHeaders,
override
Implementation
@override
Future<void> open({
required String path,
required String audioType,
String? package,
bool autoStart = false,
double volume = 1,
double? seek,
double? playSpeed,
Map? networkHeaders,
}) async {
stop();
_durationMs = null;
_position = null;
final element = web.HTMLAudioElement()
..src = findAssetPath(path, audioType, package: package);
_audioElement = element;
// HTMLAudioElement cannot take networkHeaders
_onEndedListener = ((web.Event event) {
channel.invokeMethod(WebPlayer.methodFinished, true);
}).toJS;
element.addEventListener('ended', _onEndedListener);
_onCanPlayListener = ((web.Event event) {
if (autoStart) {
play();
}
this.volume = volume;
final durationMs = (element.duration) * 1000;
if (durationMs != _durationMs) {
_durationMs = durationMs;
channel.invokeMethod(
WebPlayer.methodCurrent, {'totalDurationMs': durationMs});
}
if (seek != null) {
this.seek(to: seek);
}
if (playSpeed != null) {
this.playSpeed = playSpeed;
}
// single event
if (_onCanPlayListener != null) {
element.removeEventListener('canplay', _onCanPlayListener);
_onCanPlayListener = null;
}
}).toJS;
element.addEventListener('canplay', _onCanPlayListener);
}