我有这样一个专栏:
Column(children: [
product.videos![product.videoIndex].videoUrl != null &&
product.videos![product.videoIndex].videoUrl != ""
? VideoPlayerWidget(
videoAddress: product.videos![product.videoIndex].videoUrl)
: Image.asset('assets/images/video-placeholder.jpg'),
]),
我得到这个错误:
_CastError (Null check operator used on a null value)
我知道变量可能为空,这就是我将它们放在空检查 if 语句中的原因,但我不知道为什么会出现空检查错误以及如何通过它?
Flutter 迫使我将
!
放在空变量之后,然后它因此给我错误!
这是因为
product.videos
是null
,虽然如果它是null
你处理了条件,但是你向dart
编译器保证product.videos
永远不会是null
,通过使用!
opeartor。把!
改成?
的意思,可能会是null
,如果是null
就要注意了。
通过将
!
替换为 ?
来更改您的代码:
product.videos?[product.videoIndex].videoUrl != null &&
product.videos?[product.videoIndex].videoUrl != ""
? VideoPlayerWidget(
videoAddress: product.videos![product.videoIndex].videoUrl)
: Image.asset('assets/images/video-placeholder.jpg'),
编辑评论:
你能解释一下 ! 之间有什么区别吗?和 ?。和 ?和??
!
- 说编译器值永远不可能是null
.var val1 = val2! // val2 can never be null
?
- 说编译器值可以是null
.String? val; // Here val can be potentially null
?.
- 只有在不为空时才访问。object?.prop1; // Here prop1 is accessed only if object is not null
??
- 如果值为空则为替代值var val1 = val2 ?? val3; // if val2 is null assign va13 to val1
看起来你的
product.videos
本身null
。所以在!
条件下将?
更改为if
。
Column(children: [
product.videos?[product.videoIndex].videoUrl != null &&
product.videos?[product.videoIndex].videoUrl != ""
? VideoPlayerWidget(
videoAddress: product.videos![product.videoIndex].videoUrl)
: Image.asset('assets/images/video-placeholder.jpg'),
]),