【问题标题】:Can't change the data inside the void function无法更改 void 函数内的数据
【发布时间】:2019-12-03 05:03:07
【问题描述】:

我试图在每次通过 for 函数时添加到名为 counter 的 int 变量,但它似乎没有加起来,因为它不在范围内。

int test(String carNumber) {
    int counter = 0;

    Firestore.instance
        .collection('Notes')
        .document('LoanedEquipments')
        .collection(carNumber)
        .getDocuments()
        .then((QuerySnapshot snapshot) {
      snapshot.documents.forEach((f) {
        print(f.data['Items']);
        counter++;
      });
    });
    return counter;
  }

【问题讨论】:

    标签: flutter dart google-cloud-firestore


    【解决方案1】:

    试试下面的代码,

    Future<int> test(String carNumber) async {
        int counter = 0;
    
        QuerySnapshot snapShot=await Firestore.instance
            .collection('Notes')
            .document('LoanedEquipments')
            .collection(carNumber)
            .getDocuments();
    
        if(snapShot!=null){
          snapShot.documents.forEach((f) {
            print(f.data['Items']);
            counter++;
          });
        }
    
        return counter;
      }
    

    当您在 then 方法中更新计数器值时,您没有得到适当的计数器值,该方法将在您的 Querysnapshot 数据从 firebase 之后调用。

    您的 Querysnapshot 需要一些时间才能从 Firebase 中查询数据。因此,在获取 Querysnapshot 数据之前,您的方法会返回您的初始计数器值。

    因此,使用 await 方法等待 Querysnapshot 从 firebase 获取数据并计算计数器值,然后返回计数器值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多