在高于2.12.0的dart sdk中,我们经常使用'?‘为了确保该参数也可以具有空值,但是如何使用转换数据类型?转换为数据类型时不带?反之亦然。排序“int”的最好方法是什么?不能为'int‘类型。
发布于 2021-05-15 23:44:43
在将可空字符串(String?)分配给不可空字符串(String)时,会出现此错误。对于ex:
String? s = 'a';
int expectsString(String s) => s.length;
void main() {
expectsString(s); // <-- Error
}解决方案是提供一个不可为空的String。您可以使用以下命令来完成此操作:
(1)局部变量:
void main() {
var s1 = s; // Local variable
expectsString(s1 ?? 'default value');
}(2) Bang运算符:
void main() {
expectsString(s!); // Bang operator
}发布于 2021-05-12 07:42:54
空安全是一种方法,它告诉我们一个类型可以是空的,也可以不是空的,你没有在对象中包装任何东西,所以你没有任何东西要解包。
也许您将其与函数式语言或Java中的可选类型混淆了。其中,如果可选类型包含值,则可以对其进行解包。
使用dart,google做出了另一个决定,让用户可以编写干净的代码,而不检查对象是否为空,反之亦然,因此使用空安全性,您可以从数学上证明您的代码不能访问空引用。
因此,如果您需要解开空对象,或者您不需要它,或者您需要这样的检查
foo(int? i) {
if (i != null) {
print(i + 1);
}
}我想指出一个dart开发人员的很好的参考资料,它描述了为什么谷歌采取这个决定https://medium.com/dartlang/why-nullable-types-7dd93c28c87a
发布于 2021-06-16 18:13:57
我在我的一个flutter应用程序中遇到了类似的问题,我已经通过从String?到String的类型转换解决了这个问题。
就像下面的代码一样:
// I'm using a List with one element to generate the same error,
// because the error doesn't happen for one single variable.
List<String?> imageUrls = ['https://www.example.com/example_image.png',];
// you cast the element imageUrls[0] with 'as' keyword from String? to String
NetworkImage(imageUrls[0] as String); // NetworkImage() takes String parameterhttps://stackoverflow.com/questions/67495492
复制相似问题