有没有方法可以知道交易是否成功?如果我上传大型档案并花费太多时间,我需要实现加载“小部件动画”。然后在成功后更改屏幕,但我不知道如何。
谢谢!
交易示例:
Firestore.instance.runTransaction((Transaction transaction) async {
CollectionReference reference = Firestore.instance.collection("pets_data");
await reference
.add({"name_pet":"${_nameController.text}",
"age":"${_lifeController.text}",
"photo_url":"$downloadableUrl",
"editing":false,
"score":0
});
});
答案 0 :(得分:2)
在这种情况下,您无法通过C++ Reference来电,因为它会返回Future<Map<String, dynamic>>
。由于我已检查 ,它将始终返回空 Map
。因此,runTransaction
函数本身无法获得任何东西。
您可以轻松地从您的参考文件中获取Stream
更新,这看起来像这样:
DocumentReference documentReference;
firestore.runTransaction( // firestore in this case is your Firestore instance
(Transaction transaction) async {
// whatever you do here with your reference
await transaction.update(
documentReference,
...
);
documentReference.snapshots().listen((DocumentSnapshot event) {
// here you could e.g. check if the transaction on your reference was succesful
});
正如您所见,我在相同 snapshots()
上使用了Stream<DocumentSnapshot)
DocumentReference
,因为运行了事务。事务完成后Stream
将立即更新 并且服务器会返回给您。
要查看无法评估事务结果的原因,请在客户端检查runTransaction
。