【发布时间】:2021-06-02 16:42:11
【问题描述】:
如果对象的字段可以为空,我无法理解如何键入提升对象的字段。假设我有以下 Comment 类并尝试访问其一个可为空的字段:
class Comment {
final String? text;
Comment(this.text);
}
void main() {
final comment = Comment("comment");
if (comment.text!= null) {
String text = comment!.text;
}
}
Dart 编译器会给我一个错误,因为我试图将一个可为空的变量分配给一个不可为空的变量。根据我从研究这个主题中收集到的信息,不可能使用实例变量进行类型提升,因为可以修改实例变量,这会破坏声音的空安全性。我已经看到在这些情况下使用了 Null 断言运算符 (!.),但它似乎不适用于字段,只能用于方法。
使用 dart null-safety,我应该如何分配一个可为空的字段,例如 String?到一个不可为空的变量(字符串)。为了同样的效果,我应该如何将一个可为空的字段传递给一个需要非空参数的函数。
【问题讨论】:
-
您将
!放在错误的位置。comment已知不为空;它的 member 不能保证是非空的,所以你需要做String text = comment.text!;. -
这正是我正在寻找的答案。谢谢!
标签: flutter dart dart-null-safety