initialize method

Future<void> initialize()

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