Firestore中fromSnapshot方法数据为null时应返回什么?
处理Firestore fromSnapshot中data为null的情况
针对你代码里的else代码块,有几种常见的处理方案,可根据业务场景选择:
抛出异常
因为QueryDocumentSnapshot对应的是Firestore中已存在的文档,正常情况下snapshot.data()不应该为null。如果出现这种情况,属于异常场景,抛出异常能快速定位问题根源。
代码示例:factory EventTypeModel.fromSnapshot(QueryDocumentSnapshot snapshot) { final data = snapshot.data() as Map<String, dynamic>?; if (data != null) { final String name = data['name'] as String; return EventTypeModel(name: name); } else { throw ArgumentError("文档 ${snapshot.id} 的数据为null,不符合预期"); } }返回默认实例
如果希望程序不崩溃,而是用默认值兜底(适合对数据完整性要求不高的场景),可以返回一个预设的默认实例:factory EventTypeModel.fromSnapshot(QueryDocumentSnapshot snapshot) { final data = snapshot.data() as Map<String, dynamic>?; if (data != null) { final String name = data['name'] as String; return EventTypeModel(name: name); } else { return EventTypeModel(name: "默认事件类型"); } }返回null(配合可空类型)
修改工厂方法的返回类型为EventTypeModel?,当data为null时返回null,调用处需要处理null情况,适合严格控制数据有效性的场景:factory EventTypeModel?.fromSnapshot(QueryDocumentSnapshot snapshot) { final data = snapshot.data() as Map<String, dynamic>?; if (data != null) { final String name = data['name'] as String; return EventTypeModel(name: name); } else { return null; } }
额外补充:QueryDocumentSnapshot在Firestore的设计中代表已存在的文档,正常流程下snapshot.data()不会返回null。出现这种情况大概率是文档被删除后缓存未更新,或者业务逻辑有误,所以优先推荐抛出异常的方案,能及时发现潜在问题。
内容的提问来源于stack exchange,提问作者Wassef Hassine
相关产品推荐
相关产品推荐

