首页 > 解决方案 > 使用 Flutter 将 CRUD 操作应用于 Cloud Firestore 中的文档的推荐方法是什么?

问题描述

我正在考虑迁移一个用 Xamarin 编写的大型应用程序,并以Cloud Firestore作为后端迁移到 Flutter。由于 Cloud Firestore 仍处于测试阶段,从 Flutter 客户端调用时,似乎很少有具体示例展示最佳实践。

特别是 - 似乎没有直接的方法来检查 TX 是否失败或是否成功。

因此,以标准的“删除”操作为例 - 在在线/离线模式下滚动您自己的事务的最佳方法是什么,包括在 Flutter 中提供适当的错误处理?

我在下面扩展了我的解决方案(在 remove 方法中),您可以看到正在进行两个网络调用,一个用于获取最新的文档引用,另一个用于执行删除。

但是,由于我们使用 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 订阅:

Streambuilder 订阅

在创建的FirestoreListViewaListView.Builder中添加了删除/编辑按钮,该按钮允许删除或添加任何项目,因此我们有这样的东西:

列表显示:

列表显示

在删除按钮后面,我们执行删除:

删除代码:

删除代码

标签: fluttergoogle-cloud-firestore

解决方案


推荐阅读