setQuality method
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;
}
}