状态不佳:无法在不存在的 DocumentSnapshotPlatform 上获取字段,Firebase Flutter

时间:2021-02-16 20:56:46

标签: android firebase flutter dart google-cloud-firestore

我正在通过文档 ID 获取数据,但出现此错误:

错误状态:无法在不存在的 DocumentSnapshotPlatform 上获取字段

并且它工作,我可以通过文档 ID 从 firebase 获取数据,但它在调试控制台中给出了错误。

我正在使用 StreamBuilder 获取数据:

 StreamBuilder(
          stream: _databaseService.productCollection.doc(docID).snapshots(),
          builder: (context, snapshot) {
            if (!snapshot.hasData) {
              return Center(
                child: CircularProgressIndicator(
                  valueColor:
                      new AlwaysStoppedAnimation<Color>(Colorsx.mainColor),
                ),
              );
            }
            var document1 = snapshot.data;

            return Container(
              decoration: BoxDecoration(
                color: Colorsx.mainColor,
                borderRadius: radius,
              ),
              // color: Colorsx.mainColor,
              child: Column(
                children: [
                  Expanded(
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: [
                        Chip(
                          label: LabelText1("Ürün Adı:  "),
                          backgroundColor: Colorsx.mainColor,
                        ),
                        Chip(
                          shadowColor: Colorsx.mainColor2,
                          elevation: 24,
                          label: LabelText1(document1["productName"] ?? ""),
                          backgroundColor: Colorsx.mainColor2,
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            );
          },
        ),

我找不到这里的问题,但根据我的研究,它与地图有关。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

看起来 _databaseService.productCollection.doc(docID) 可能在此代码运行时的某个时刻未指向现有文档。如果您随后对其调用 document1["productName"],则会引发您看到的错误。

所以你需要决定在这种情况发生时渲染什么(即使只是短暂的)。例如,您可以让 CircularProgressIndicator 一直停留在屏幕上,直到有文档可用:

if (!snapshot.hasData || !snapshot.data.exists) {

答案 1 :(得分:0)

如果您使用的是 cloud_functions ^2 并且使用的是 1,则您可能会遇到此问题,处理该错误的唯一方法是使用 try catch 函数

getSnapshot(DocumentSnapshot snapshot, String key) {
 try {
  return snapshot.get(key);
  } catch (error) {
   return null;
 }
}

然后调用它

Status.fromSnapShot(DocumentSnapshot snapshot)
  : assert(snapshot.exists != false),
    name = getSnapshot(snapshot, 'name'),

以前是这样的

Status.fromSnapShot(DocumentSnapshot snapshot)
  : assert(snapshot.exists != false),
    name = snapshot.data()['name'],