代码段A正常工作,但代码段B不正常。我用print()检查变量"image"的数据类型,A和B的图像(变量)都有一个数据类型(XFile),而不是Null。但B仍然不工作....
final XFile? image = await _picker.pickImage(source: ImageSource.gallery);
print(image);
// Code snippet A
if (image == null) return null;
return File(image.path);
// Code snippet B
return File(image!.path);
你的代码片段A的含义是:
如果image
变量为null,则返回null,否则返回image
变量。
你的代码段B的含义是:
返回image
变量,尽管image
变量可能为空。
如果您使用代码片段B,您使用!
并将变量从可空类型更改为非可空类型,并且变量实际上是空的(没有值),并且您不能使用.path
,因此它返回错误。
image
可以是null
,在代码A
中,您检查nullable
值,因此您不会得到exception
,但在代码B
中,您在nullable
值上使用!
,这是错误的。
如果你在寻找简短的形式,你可以试试:
return image == null ? null : File(image.path);