我是新的flutter和firebase,所以请原谅我,如果这是一个愚蠢的问题。
我正在尝试从Cloud Firestore读取文档并将数据放置在名为Profile的已定义对象中。
这是我当前的实现:
final docRef = FirebaseFirestore.instance
.collection('/user_data')
.doc(FirebaseAuth.instance.currentUser!.uid);
Future<Profile> readUserDocument() {
return docRef.get().then(
(DocumentSnapshot doc) {
return Profile(
imagePaths: doc.get('imagePaths'),
firstName: doc.get('firstName'),
lastName: doc.get('lastName') ,
bio: doc.get('bio'),
gender: doc.get('gender'),
hometown: doc.get('hometown'),
age: doc.get('age'),
ethnicity: doc.get('ethnicity'),
hairColor: doc.get('hairColor'),
eyeColor: doc.get('eyeColor'),
hobbies: doc.get('hobbies'),
instagram: doc.get('instagram'),
snapchat: doc.get('snapchat'),
work: doc.get('work'),
school: doc.get('school'),
educationLevel: doc.get('educationLevel')
);
},
onError: (e) => print("Error getting document: $e"),
);
}
在一个单独的文件中,我定义了一个在onClick方法中调用readUserDocument()
的列表切片
ListTile(
onTap: () async {
Profile userData = await readUserDocument(); // TYPE ERROR HERE
// ...
}
// ...
)
调用await readUserDocument()
时,将引发以下异常:_TypeError (type 'List<dynamic>' is not a subtype of type 'List<String>')
这让我很困惑,因为readUserDocument()
将返回一个配置文件,而不是List<dynamic>
。我也很困惑为什么这里会涉及List<String>
。
任何帮助都将不胜感激。谢谢!
2条答案
按热度按时间7ivaypg91#
也许您可以尝试获取文档快照并在返回ListTile时构建对象
eblbsuwk2#
我最终采取了不同的方法,并遵循Firestore documentation example。
我向Profile对象添加了
factory Profile.fromFirestore()
和Map<String, dynamic> toFirestore()
方法,然后就可以使用转换器来获取Profile对象