这个代码是如何在dart中传递null安全的?



我在写一个简单的类时有点困惑:

class NewsSource {
final String url;
final String name;
final String imageUrl;
NewsSource({required this.url, required this.name, required this.imageUrl});
factory NewsSource.fromFireStore(
DocumentSnapshot<Map<String, dynamic>> snapshot,
SnapshotOptions? options) {
final data = snapshot.data();
return NewsSource(
url: data?['url'], name: data?['name'], imageUrl: data?['imageUrl']);
}
Map<String, dynamic> toFireStore() {
return {"url": url, "name": name, "imageUrl": imageUrl};
}
}

fromFireStore函数调用NewsSource构造函数,其中参数可以为空,但仍然没有抱怨为什么?

PS:如果我删除动态,然后它开始抱怨,我猜任何使用动态使空检查冗余。

这是因为dynamicdynamic类型的变量基本上不是空安全的,仍然需要进行相应的处理。

我的猜测是,如果我们假设映射不为空,那么data?['url']将返回dynamic类型的变量,其中null也是有效值。并且dynamic类型的变量永远不会被检查为null安全。所以它甚至不会抱怨地图是否为null

这样:Map<String, dynamic> toFireStore()将所有类型映射到dynamic,这不是空安全的。

动态允许赋值非空或可空类型。

非官方Dart文档

最新更新