【发布时间】:2021-08-09 04:12:03
【问题描述】:
the DocumentSnapshot.data() 的文档说它返回 Map<String, dynamic>
尽管如此,IDE 告诉我错误并声称 data() 返回 Object?
The argument type 'Object?' can't be assigned to the parameter type 'Map<String, dynamic>'.dart(argument_type_not_assignable)
我想要做的是以下
factory NoteDto.fromJson(Map<String, dynamic> json) =>
_$NoteDtoFromJson(json);
factory NoteDto.fromFirestore(DocumentSnapshot doc) {
return NoteDto.fromJson(doc.data()).copyWith(id: doc.id);
}
我应该以某种方式将Object? 转换为Map<String, dynamic> 吗?
我查看了DocumentSnapshot.data() 的定义,发现它使用了一个模板T? data(),而类本身是abstract class DocumentSnapshot<T extends Object?>。现在我明白了Object? 的来源。
如何确保我从DocumentSnapshot.data() 获得Map<String, dynamic> 而不是Object??
如果我将NoteDto.fromFirestore 更改为
factory NoteDto.fromFirestore(DocumentSnapshot<Map<String, dynamic>> doc) {
我仍然需要在某个时候将 Object? 转换为 MapQueryDocumentSnapshot<Object?> doc:
...
.map((doc) => NoteDto.fromFirestore(doc).toDomain())
...
【问题讨论】:
-
你能解决这个问题吗?我在 DataSnapshot 事件中遇到了类似的问题
标签: flutter dart google-cloud-firestore