В документации для 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?
.
Как убедиться, что я получу Map<String, dynamic>
вместо Object?
от DocumentSnapshot.data()
?
Если я изменю NoteDto.fromFirestore
на
factory NoteDto.fromFirestore(DocumentSnapshot<Map<String, dynamic>> doc) {
Мне все еще нужно преобразовать Object?
в Map ‹String, dynamic› в какой-то момент, но на этот раз это QueryDocumentSnapshot<Object?> doc
в следующем вызове:
...
.map((doc) => NoteDto.fromFirestore(doc).toDomain())
...
В других местах у меня были функции, возвращающие
Future<DocumentReference>
иCollectionReference
. Пришлось добавлять к ним типы вот так:Теперь, когда я получаю
QueryDocumentSnapshot doc
в:его тип
QueryDocumentSnapshot<Map<String, dynamic>>
вместоQueryDocumentSnapshot<Object?>
, что решает мою проблему.