繁体   English   中英

这段代码如何在飞镖中传递 null 安全性?

[英]How this code is passing null safety in dart?

在编写一个简单的类时,我有点困惑,如下所示:

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:如果我删除动态然后它开始抱怨,我猜任何使用动态都会使空检查变得多余。

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

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

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

动态允许分配不可为空或可为空的类型。

非官方 Dart 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM