Flutter中URL转Youtube API ID时出现String?无法赋值给String类型报错
问题原因
这个报错是Dart空安全机制触发的类型不匹配问题,一共涉及两处可空类型校验:
- 你从document中读取的
url为String?可空类型,而YoutubePlayer.convertUrlToId入参要求为非空String类型 YoutubePlayer.convertUrlToId方法本身返回值也为String?类型(如果传入的URL不符合Youtube视频链接规则会返回null),而initialVideoId参数要求必须传入非空的字符串类型视频ID
解决方案
你可以根据你的业务场景选择以下任意一种处理方式:
方案1:确定值一定非空时用强制断言
如果你能100%保证读取到的url一定非空、且一定是合法的Youtube视频链接,可以用!运算符强制声明值非空:
var url = document['url'] as String; YoutubePlayerController _controller = YoutubePlayerController( initialVideoId: YoutubePlayer.convertUrlToId(url)! );
方案2:做空判断兼容异常场景
如果不确定值是否合法,建议先做空校验避免运行时崩溃:
var url = document['url']; if (url != null) { String? videoId = YoutubePlayer.convertUrlToId(url); if (videoId != null) { YoutubePlayerController _controller = YoutubePlayerController( initialVideoId: videoId ); } else { // 此处编写URL不是合法Youtube链接的业务逻辑,比如提示用户链接无效 } } else { // 此处编写读取url为空的业务逻辑 }
方案3:用默认值兜底
如果不需要单独处理异常场景,也可以用??运算符给空值设置默认值兜底:
// url为空时赋值为空字符串,转换ID失败时用预设的默认视频ID兜底 var url = document['url'] ?? ''; String targetVideoId = YoutubePlayer.convertUrlToId(url) ?? '你的默认视频ID'; YoutubePlayerController _controller = YoutubePlayerController( initialVideoId: targetVideoId );
内容的提问来源于stack exchange,提问作者Anantojudeviraj Deviraj
相关产品推荐
相关产品推荐

