Ошибка оператора DocumentSnapshot в пользовательской модели

#flutter #dart

#флаттер #dart

Вопрос:

Это мой первый вопрос, и я не профессионал в области кодирования, просто стремлюсь развиваться, поэтому надеюсь, что смогу объяснить себя.

Я пытался разработать социальную платформу, и у меня возникли проблемы с пользовательской моделью, которая связана с firebase. Вы можете увидеть мою пользовательскую модель ниже:

 import 'package:cloud_firestore/cloud_firestore.dart';

    class User {
      final String id;
      final String profileName;
      final String username;
      final String url;
      final String email;
      final String bio;
    
      User({
        this.id,
        this.profileName,
        this.username,
        this.url,
        this.email,
        this.bio,
    });
    
      factory User.fromDocument(DocumentSnapshot doc){
        return User(
          id: doc.id,
          profileName: doc['profileName'],
          username: doc['username'],
          url: doc['photoUrl'],
          email: doc['email'],
          bio: doc['bio'],
        );
      }
    }
  

Когда я создаю пользовательскую модель, подобную этой, я получаю сообщение «Оператор ‘[]’ не определен для типа ‘DocumentSnapshot'». ошибка, как вы можете видеть на скриншоте.

Скриншот

Я потратил 3 дня, чтобы найти решение, но я не смог найти похожие проблемы в Интернете. Можете ли вы мне помочь, пожалуйста?

Ответ №1:

Или попробуйте добавить () после данных

 factory User.fromDocument(DocumentSnapshot doc){
        return User(
          id: doc.id,
          profileName: doc.data()['profileName'],
          username: doc.data()['username'],
          url: doc.data()['photoUrl'],
          email: doc.data()['email'],
          bio: doc.data()['bio'],
        );
 } 
  

Ответ №2:

Попробуйте использовать doc.data[»]

 factory User.fromDocument(DocumentSnapshot doc){
        return User(
          id: doc.id,
          profileName: doc.data['profileName'],
          username: doc.data['username'],
          url: doc.data['photoUrl'],
          email: doc.data['email'],
          bio: doc.data['bio'],
        );
 } 
  

Комментарии:

1. Большое вам спасибо. Это сработало! Кстати, когда я пишу что-то вроде «doc.data [‘ProfileName]», ошибка не исчезла. Я написал что-то вроде «doc.data()[‘ProfileName]», и тогда это сработало. С другой стороны, я не смог найти это без вашей помощи. Еще раз спасибо.

Ответ №3:

Надеюсь, это решение поможет кому-то, кто сталкивается с такой же проблемой

попробуйте использовать dynamic, как показано ниже, если вы используете null-safety

 factory User.fromDocument(DocumentSnapshot doc){
 final data = doc.data() as dynamic;
    return User(
     id: doc.id,
     profileName: doc['profileName'],
     username: doc['username'],
     url: doc['photoUrl'],
     email: doc['email'],
     bio: doc['bio'],
    );
   }

  

или сохраните только документ.данные в окончательном

 factory User.fromDocument(DocumentSnapshot doc){
 final data = doc.data();
    return User(
     id: doc.id,
     profileName: doc['profileName'],
     username: doc['username'],
     url: doc['photoUrl'],
     email: doc['email'],
     bio: doc['bio'],
    );
   }