#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'],
);
}