我的状态为DocumentReference locationDocumentRef;
。
无论是通过查询还是通过添加新文档来收集,我都基于引用来更改locationDocumentRef
。
因此,如果有一个将其引用设置为对locationDocumentRef
的引用,或者添加一个新的引用并将其引用设置为locationDocumentRef
,则我具有此功能来检查文档。我每次都通过将其设置为null来重置其值,因为我不想获得以前的结果。但是它会输出null。
所以我的问题是,我该如何解决它们并获得价值?我认为我在代码中解决的时间太早了,因此我不能等待非未来的价值。我该如何解决?
void firestoreCheckAndPush() async {
setState(() {
locationDocumentRef = null;
});
bool nameExists = await doesNameAlreadyExist(placeDetail.name);
if (nameExists) {
print('name exist');
} else {
print('name will be pushed on firestore');
pushNameToFirestore(placeDetail);
}
var resolvedRef = await locationDocumentRef;
print(resolvedRef.documentID); // I get null here
}
这些是我使用过的功能
Future<bool> doesNameAlreadyExist(String name) async {
QuerySnapshot queryDb = await Firestore.instance
.collection('locations')
.where("city", isEqualTo: '${name}')
.limit(1)
.getDocuments();
if (queryDb.documents.length == 1) {
setState(() {
locationDocumentRef = queryDb.documents[0].reference;
});
return true;
} else {
return false;
}
}
另一个
void pushNameToFirestore(PlaceDetails pd) async {
DocumentReference justAddedRef =
await Firestore.instance.collection('locations').add(<String, String>{
'city': '${pd.name}',
'image': '${buildPhotoURL(pd.photos[0].photoReference)}',
});
setState(() {
locationDocumentRef = justAddedRef;
});
}
答案 0 :(得分:1)
我首先在这里看到两个错误 var resolveRef =等待locationDocumentRef; 为什么要等待locationDocumentRef, 第二,您不用等待pushNameToFirestore(PlaceDetails pd)firestoreCheckAndPush()函数,因为pushNameToFirestore(String)是同步的,所以这很奇怪,这意味着您不会等待它完成,因此如果添加新名称,它将打印为null。 如果我错了,请纠正我。 您可以在https://www.dartlang.org/tutorials/language/futures上找到有关同步和未来的更多信息 look at the graph at the middle of the page
答案 1 :(得分:-1)
尝试一下
<div>
<span>Test One</span>
<span>Test Two</span>
<span>Test Three</span>
</div>
答案 2 :(得分:-1)
看看下面的代码。
void firestoreCheckAndPush() async {
DocumentReference documentReference;
var data = await doesNameAlreadyExist('yourname');
var dataRef = await doesNameAlreadyExist('yourname');
if (data.length > 0) {
print('name exist');
documentReference = dataRef[0].reference;
print('Document id ' + data[0].documentID);
documentReference = dataRef[0].reference;
print('Document reference ');
print(documentReference);
} else {
print('name will be pushed on firestore');
}
}