setQuality method

Future<void> setQuality(
  1. VideoQuality quality
)

Change video quality

Implementation

Future<void> setQuality(VideoQuality quality) async {
  if (!_availableQualities.contains(quality)) {
    throw Exception('Quality not available');
  }

  if (quality.url == null || quality.url!.isEmpty) {
    throw Exception('Quality URL not available');
  }

  try {
    _setState(PlaybackState.loading);
    final wasPlaying = isPlaying;
    final currentPosition = position;

    // Dispose old controller
    await _videoController?.dispose();
    _positionSubscription?.cancel();

    // Create new controller with new quality
    _videoController = VideoPlayerController.networkUrl(
      Uri.parse(quality.url!),
    );
    await _videoController!.initialize();
    _setupPositionListener();

    // Restore playback state
    await seekTo(currentPosition);
    if (wasPlaying) {
      await play();
    }

    _currentQuality = quality;
    _setState(PlaybackState.ready);
    notifyListeners();
  } catch (e) {
    _setState(PlaybackState.error);
    _errorMessage = 'Failed to change quality: ${e.toString()}';
    notifyListeners();
    rethrow;
  }
}