我正在尝试向小部件提供文档快照流,但是在此之前,我想将返回Map
class DatabaseService {
final CollectionReference userCollection =
FirebaseFirestore.instance.collection('users');
final String uid;
DatabaseService({this.uid});
// the map function
List<UserInfo> _userInfo(DocumentSnapshot snapshot) {
//the line below is where i get the error that the expression has a type 'void' and it can't be used
snapshot.data().forEach((key, value) {
return UserInfo(key: key, value: value);
}).toList();
}
// The stream
Stream<List<UserInfo>> get userData {
return userCollection.doc(uid).snapshots().map(_userInfo);
}
这是模型UserInfo
class UserInfo {
final String key;
final dynamic value;
UserInfo({this.key, this.value});
}
我非常感谢能在这里获得的任何帮助。
我也非常清楚我可以使用流构建器将流传递给小部件,但是我试图使用这种方法。
谢谢
答案 0 :(得分:1)
您需要使用map
将可迭代(列表)转换为某种形式。 forEach
不能用于此目的,因为它不能返回任何内容。
List<UserInfo> _userInfo(DocumentSnapshot snapshot) {
final data = snapshot.data();
return data.keys().map((key) {
return UserInfo(key: key, value: data[key]);
}).toList();
}
答案 1 :(得分:0)
这将是您的模特
class UserInfo {
final String key;
final dynamic value;
UserInfo({this.key, this.value});
UserInfo.mapping(String k, String v) :
key = k,
value = v;
}
然后,您可以稍作调整即可得到Tirth Patel的答案:
List<UserInfo> _userInfo(DocumentSnapshot snapshot) {
return snapshot.data().map((key, value) {
return UserInfo.mapping(key, value);
}).toList();
}
请注意 k 和 v 以及 < strong>键 和 值
我真的不能测试它,但是我认为它可以工作。