initialize method
Implementation
Future<void> initialize() async {
if (_isDisposed) return;
value = value.copyWith(status: TaPlayerStatus.loading);
try {
String? resolvedUrl;
if (source.type == TaVideoSourceType.youtube) {
resolvedUrl = await _resolveYoutubeUrl(source.id ?? source.url);
} else {
resolvedUrl = source.url;
}
if (resolvedUrl == null) throw Exception("Could not resolve video URL");
switch (source.type) {
case TaVideoSourceType.network:
case TaVideoSourceType.youtube:
_controller = VideoPlayerController.networkUrl(Uri.parse(resolvedUrl),
httpHeaders: source.headers ?? {});
break;
case TaVideoSourceType.asset:
_controller = VideoPlayerController.asset(resolvedUrl);
break;
case TaVideoSourceType.file:
_controller = VideoPlayerController.file(File(resolvedUrl));
break;
}
await _controller?.initialize();
if (_isDisposed) return;
_controller?.addListener(_listener);
// Force initial volume sync
_applyVolumeState();
// Listen to global changes
globalMute.addListener(_applyVolumeState);
_playerService.addVolumeListener(_onSystemVolumeChanged);
value = value.copyWith(
status: TaPlayerStatus.ready,
duration: _controller?.value.duration ?? Duration.zero,
);
} catch (e) {
if (!_isDisposed) {
value = value.copyWith(
status: TaPlayerStatus.error, errorMessage: e.toString());
}
}
}