firebase - 从 Firestore 中删除数据时出现 StreamBuilder 错误 - 如何捕获错误
问题描述
我正在尝试使用一个流来侦听单个文档的更新,但也处理该文档被删除(或在输入数据之前不存在)。但是,每当我删除 firestore 文档时(或在输入数据之前),我都会抛出一个错误,指出该方法被捕获为 null。我需要了解如何处理将更新文档(在下面的代码中可以正常工作)但也被删除(抛出错误时)的流。
简单地说,我只是更新一个参数(lastUpdatedDate = snapshot.data["dateUpdated"];)。这是本示例中我需要从流中获取的唯一代码。
使用的流如下:请注意,当文档存在时,这会很好地返回数据。
Stream<DocumentSnapshot> getLastUpdated(BuildContext context) async* {
final uid = await Provider.of(context).auth.getCurrentUID();
yield* Firestore.instance
.collection("UserInputDailyAverages")
.document(uid)
.collection("Domestic")
.document(formatDate(DateTime.now(), [yyyy, '', '']))
.snapshots();
}
这是构建器(当数据存储在 Firebase 中并且处理更新没问题时再次正常工作:
StreamBuilder<DocumentSnapshot>(
stream: getLastUpdated(context),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: kBackgroundColour,
),
);
}
lastUpdatedDate = snapshot.data["dateUpdated"];
return SingleChildScrollView(
child: Container(
child: Padding(
padding: const EdgeInsets.all(8.0),.....
然后,当从 firestore 中删除文档时,会引发以下错误:
在构建 StreamBuilder(dirty, dependencies: [_LocalizationsScope-[GlobalKey#01484], _InheritedTheme], state: _StreamBuilderBaseState<DocumentSnapshot, AsyncSnapshot>#caa16) 时引发了以下 NoSuchMethodError:在 null 上调用了方法“[]”。接收者:null 尝试调用:
我知道如果数据不存在则无法读取数据,但我认为这是由 !snapshot.hasData 捕获处理的。关于如何将流用于可从 Firestore 中删除的数据的任何想法?以及如何处理任何额外的 catch 语句?奇怪的是,它似乎认为即使删除了快照也存在。
提前致谢
解决方案
推荐阅读
- node.js - 如果不是 libtool_re.match(line) 而不是 libtool_re5.match(line): TypeError: cannot use a string pattern on a bytes-like object
- bdd - BDD如果我在给定条件下有多个变量,我该如何编写表格
- r - R - 在用户定义的函数 R 中将字符串作为字符串传递
- amazon-web-services - CloudFormation KMS 加密问题
- android - 按照条款在 Flutter 中创建 Sign-in-with-Google 按钮
- linux - docker-compose.yml 在以点 (.) 开头的文档上使用卷
- nosql - MySQL集群中的批量插入和更新
- google-cloud-platform - 谷歌云盔甲:无法使用云盔甲添加目标
- jquery - 请求发布后 httpObj.getResponseHeader("location") 为空
- google-drive-api - Google 云端硬盘文件权限 - 列表不完整