Flutter Web中youtube_player_iframe平台视图尺寸警告修复求助
解决youtube_player_iframe在Flutter Web中的平台视图尺寸警告
在Flutter Web项目中使用youtube_player_iframe包时,反复出现以下警告:
Height of Platform View type: [youtube-0] may not be set. Defaulting to `height: 100%`. Set `style.height` to any appropriate value to stop this message. Width of Platform View type: [youtube-0] may not be set. Defaulting to `width: 100%`. Set `style.width` to any appropriate value to stop this message.
功能运行正常,但警告十分烦人。已知Flutter 2.5版本对平台视图的尺寸处理逻辑有变更,参考官方迁移指南无法解决,调用YoutubePlayerController.setSize()还会出现超时问题。以下是几个有效修复方案:
方案一:给播放器外层包裹带明确尺寸的容器
直接在YoutubePlayerScaffold的builder中,给返回的player组件包裹一个带固定宽高或适配屏幕的容器,强制指定平台视图的尺寸:
@override Widget build(BuildContext context) { final screenWidth = MediaQuery.of(context).size.width; final playerWidth = screenWidth > 1200 ? 1200 : screenWidth * 0.9; final playerHeight = playerWidth * 9 / 16; // 保持16:9的视频比例 return kIsWeb ? YoutubePlayerScaffold( controller: _youtubePlayerController, builder: (context, player) { return Container( width: playerWidth, height: playerHeight, child: player, ); }, ) : Container(); }
方案二:在控制器就绪后再调用setSize
之前调用setSize()超时,大概率是因为控制器还未完成初始化就执行了尺寸设置。修改loadVideo方法,等待控制器就绪后再设置尺寸:
void loadVideo(String url) async { await _youtubePlayerController.loadVideo(url); // 等待播放器进入就绪状态 await Future.delayed(const Duration(milliseconds: 500)); if (_youtubePlayerController.value.isReady) { try { await _youtubePlayerController.setSize(800, 450); } catch (e) { print("设置播放器尺寸失败: $e"); } } currentVideo = url; }
方案三:初始化控制器时指定默认尺寸
在创建YoutubePlayerController时,通过YoutubePlayerParams直接设置初始宽高(部分版本的包支持该参数,若不支持则优先用前两个方案):
_youtubePlayerController = YoutubePlayerController( params: const YoutubePlayerParams( showControls: true, mute: false, showFullscreenButton: true, loop: false, strictRelatedVideos: true, width: 800, // 添加初始宽度 height: 450, // 添加初始高度 ), )..listen((event) { playerState = event.playerState; if (event.hasError) { widget.updateParent(false, event.error.toString()); } });
内容的提问来源于stack exchange,提问作者FoxDonut
相关产品推荐
相关产品推荐

