我正在考虑迁移使用Xamarin编写的大型应用程序,并以 Cloud Firestore 作为后端迁移到Flutter。由于Cloud Firestore仍处于测试阶段,因此从Flutter客户端调用时,很少有具体示例展示最佳实践。
尤其是-似乎没有直接的方法来检查TX是否失败或成功。
因此,以标准的“ 删除”操作为例-在在线/离线模式下滚动自己的交易的最佳方法是什么,包括在Flutter中提供适当的错误处理?
我在(在remove方法中)下扩展了解决方案,您可以看到正在进行两个网络调用,一个用于获取最新的文档参考,另一个用于执行删除。 / p>
但是,由于我们使用StreamBuilder来获取文档更改时的更新,因此我们不能肯定地假设 widget.documents [index] .reference 将保存最新的文档参考,因此废除了与:
var snapshot=await tx.get(docReference)
if (snapshot.exists){
await tx.delete(snapshot.reference)
}
,只需使用:
var docReference = widget.documents[index].reference;
await tx.delete(docReference);
注意
以上两种方法都可以工作-我追求的是一种100%符合ACID测试(与交易有关)并提供最佳性能的方法。
用例示例
Streambuilder订阅:
在FirestoreListView
中,创建了一个ListView.Builder
,其中添加了删除/编辑按钮,该按钮允许删除或添加任何项目,因此,我们具有以下内容:
列表视图:
在“删除”按钮后面,我们执行删除操作:
删除代码: