Firebase DocumentSnapshot.data () возвращает объект? вместо Map ‹String, динамический›

В документации для 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())
...

См. также:  Как я могу проверить, есть ли значение, например имя существует в коллекции в любом из документов в Cloud Firestore?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Chris

    В других местах у меня были функции, возвращающие Future<DocumentReference> и CollectionReference. Пришлось добавлять к ним типы вот так:

    Future<DocumentReference<Map<String, dynamic>>>
    ...
    CollectionReference<Map<String, dynamic>>
    

    Теперь, когда я получаю QueryDocumentSnapshot doc в:

    .map((doc) => NoteDto.fromFirestore(doc).toDomain())
    

    его тип QueryDocumentSnapshot<Map<String, dynamic>> вместо QueryDocumentSnapshot<Object?>, что решает мою проблему.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: