0

我似乎无法在不丢失快照的情况下将 QuerySnapshot 从一个类传递到另一个类,因此我试图找到解决方法(请参阅我的帖子here)。我正在尝试使用 StreamBuilder 再次提取数据。

StreamBuilder (
        stream: _db.collection('agency').doc(globals.agencyId).
        collection('trxns').doc(globals.currentTrxnId).snapshots(),
        builder: (context, trxnSnapshot) {  <<<< ERROR 1
        if (trxnSnapshot.hasData) {
          var outPut = trxnSnapshot.data();  <<<< ERROR 2
          clientFNameController.text = trxnSnapshot.data.data['clientFName'] ?? ""; <<<< ERROR 3
        }
)

我遇到了一些错误。

  1. 主体可能正常完成,导致返回“null”,但返回类型可能是不可为空的类型。我试过添加“?” 和 ”!” 但它不工作。

  2. 在帖子中找到了这行代码,但我不确定如何从快照中获取数据。

  3. 此错误将在 #2 修复后修复。

这些应该很容易修复,但我不知道该怎么做。

编辑我尝试添加类型转换,如下所示,但出现新错误。

StreamBuilder<QuerySnapshot> (
        stream: _db.collection('agency').doc(globals.agencyId).
        collection('trxns').doc(globals.currentTrxnId).snapshots(),
        builder: (context, trxnSnapshot) {
          if (trxnSnapshot.hasData) {
            var outPut = (trxnSnapshot.data() as QueryDocumentSnapshot);
                        clientFNameController.text = trxnSnapshot.data.data['clientFName'] ?? "";
          }
)

在此处输入图像描述

4

1 回答 1

0

您应该首先检查您收到的快照是否有任何数据。如果没有,则无法调用trxnSnapshot.data()

尝试这个:

StreamBuilder (
        stream: _db.collection('agency').doc(globals.agencyId).
        collection('trxns').doc(globals.currentTrxnId).snapshots(),
        builder: (context, trxnSnapshot) {
          if(trxnSnapshot.hasData){  
            var outPut = trxnSnapshot.data();  
            clientFNameController.text = trxnSnapshot.data.data['clientFName'] ?? "";
       } else {
            print("Do something, maybe show a loading widget");
    }
          
)
于 2021-07-28T01:18:53.980 回答