我想在Firestore中进行简单的查找,以从集合“属性”中获取给定“ propertyID”(“属性” documentID)的“ propertyName”,并将其分配给变量propertyName。
print()给出'from initstate propertyName ='Future'的实例,而不是Firestore中的实际值。如何提取实际值?
我也尝试过使用StreamBuilder,但仍然遇到相同的问题。
@override
void initState() {
super.initState();
var propertyName = _getPropertyNameFromPropertyID(
widget.propertyID); // to get propertyName from Firestore
print('from initstate propertyName = $propertyName');
}
Future _getPropertyNameFromPropertyID(propertyID) async {
DocumentSnapshot snapshot = await Firestore.instance
.collection('properties')
.document(propertyID)
.get();
String result = snapshot['propertyName'].toString();
return result;
}
答案 0 :(得分:1)
那是因为您的方法返回了Future
,所以您将需要使用async
/ await
或直接从Future
获得结果。
选项1
@override
void initState() {
super.initState();
_getPropertyNameFromPropertyID(widget.propertyID).then ((propertyName){
print('from initstate propertyName = $propertyName');
});
}
选项2
@override
void initState() {
super.initState();
_loadAsyncData();
}
_loadAsyncData() async {
var propertyName = await _getPropertyNameFromPropertyID(
widget.propertyID); // to get propertyName from Firestore
print('from initstate propertyName = $propertyName');
}
Future _getPropertyNameFromPropertyID(propertyID) async {
DocumentSnapshot snapshot = await Firestore.instance
.collection('properties')
.document(propertyID)
.get();
String result = snapshot['propertyName'].toString();
return result;
}