微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Flutter 应用中使用 Stream 填充 TextEditingController

如何解决在 Flutter 应用中使用 Stream 填充 TextEditingController

我似乎无法在不丢失快照的情况下将 QuerySnapshot 从一个类传递到另一个类,因此我试图找到解决方法 (see my post 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',但返回类型可能是不可为 null 的类型。 我试过添加“?”和 ”!”但它不起作用。

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

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

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

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

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

enter image description here

解决方法

您应该首先检查您收到的快照是否有任何数据。如果没有,就不可能调用 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");
    }
          
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。