В документации для 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?>, что решает мою проблему.