首页 > 解决方案 > 从 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 语句?奇怪的是,它似乎认为即使删除了快照也存在。

提前致谢

标签: firebaseflutterstreamsnapshotstream-builder

解决方案


推荐阅读