所以我正在尝试从Firestore文档中检索数据,这是一封电子邮件 我不明白从Firestore检索数据时如何将数据另存为字符串。 帮助。
获取错误:在结果上,类型'Future不是类型'String'的子类型:getEmail() ps:即时通讯新手 我的代码:
getEmail() async{
String _email = (await FirebaseAuth.instance.currentUser()).email;
return _firestore.collection('users').document(_email).collection('met_with').document('email').get();
}
...
children: <Widget>[
BottomSheetText(question: 'Email', result:getEmail()),
SizedBox(height: 5.0),
....
答案 0 :(得分:0)
..document('email)'.get()
实际上将返回Future<DocumentSnapshot>
。因此,getEmail()
不会返回String
。
您需要从DocumentSnapshot
中获取数据:
Future<String> getEmail() async {
String _email = (await FirebaseAuth.instance.currentUser()).email;
DocumentSnapshot snapshot = await _firestore.collection('users')
.document(_email)
.collection('met_with')
.document('email')
.get();
// print("data: ${snapshot.data}"); // might be useful to check
return snapshot.data['email']; // or another key, depending on how it's saved
}
有关更多信息,请查看API reference
中的文档现在,除此之外,getEmail()
是一个异步函数。从窗口小部件树中调用它可能不是您要处理的方式。
您需要等待getEmail()
的结果,然后才能在用户界面中使用它。 FutureBuilder
可能会帮助:
children: <Widget>[
FutureBuilder<String>(
future: getEmail(),
builder: (context, snapshot) {
if(!snapshot.hasData) {
return CircularProgressIndicator(); // or null, or any other widget
}
return BottomSheetText(question: 'Email', result: snapshot.data);
},
),
SizedBox(height: 5.0),
... //other
],