【问题标题】:How to return a future<double> - Flutter如何返回未来<double> - Flutter
【发布时间】:2020-06-24 06:45:28
【问题描述】:

我有一个名为getAvctUODoss() 的函数,它应该返回Future&lt;double&gt;,但它总是返回0.0。如果我在 forEach 循环中添加print('sum');,我会看到代码有效,只是为了返回它,我遇到了一些困难。我需要这个函数在另一个函数中的结果,但是因为这个错误的返回,我不能更进一步。我认为我的错误在于将sum 声明为双精度,但我不知道如何解决此问题。我在 Stack Overflow 上进行了搜索,但只找到了在 forEach 循环中打印值的代码。

提前感谢您的宝贵帮助。

这是我的两个函数的代码:

  Future<double> getAvctUODoss(String numDoss) async {
    double sum = 0.0; // I think the problem is in this declaration

    affaireCollection
        .document(numDoss.substring(0, 7))
        .collection('dossiers')
        .document(numDoss)
        .collection('rp')
        .getDocuments()
        .then((querySnapshot) {
      querySnapshot.documents.forEach((documentSnapshot) async {
        sum += await documentSnapshot.data['avct'] *
            (await documentSnapshot.data['UO_AT'] +
                await documentSnapshot.data['UO_CH']);
      });
    });
    return sum; //return always 0.0
  }

  Future updateAvctDoss(String numDoss) async {
    await affaireCollection
        .document(numDoss.substring(0, 7))
        .collection('dossiers')
        .document(numDoss)
        .updateData({
      'avct': await getAvctUODoss(numDoss) / await getTotalUODoss(numDoss)
    });
  }

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    把函数改成如下:

      Future<double> getAvctUODoss(String numDoss) async {
        double sum = 0.0; 
    
        QuerySnapshot querySnapshot = await affaireCollection
            .document(numDoss.substring(0, 7))
            .collection('dossiers')
            .document(numDoss)
            .collection('rp')
            .getDocuments();
          querySnapshot.documents.forEach((documentSnapshot){
            sum += documentSnapshot.data['avct'] *
                (documentSnapshot.data['UO_AT'] +
                    documentSnapshot.data['UO_CH']);
        });
        return sum;
      }
    

    既然你声明了函数async,那么不要使用then(),而是使用await等待数据被完全检索,然后sum将被更新并返回数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 2012-12-02
      • 1970-01-01
      • 2012-10-24
      • 2022-11-26
      • 2022-01-22
      • 2020-11-05
      • 1970-01-01
      相关资源
      最近更新 更多