无法更改void函数内的数据

时间:2019-12-03 05:03:07

标签: flutter dart google-cloud-firestore

每次尝试通过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;
  }

1 个答案:

答案 0 :(得分:2)

只需尝试以下代码,

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方法中的计数器值,该方法将在从firebase中获取Querysnapshot数据后调用。

您的Querysnapshot将花费一些时间从Firebase查询数据。因此,在获取Querysnapshot数据之前,您的方法将返回初始计数器值。

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