【问题标题】:Flutter Firebase query - Show set value in Text WidgetFlutter Firebase 查询 - 在文本小部件中显示设置值
【发布时间】:2020-11-20 12:33:27
【问题描述】:

我有一个简单的FutureBuilder,我在其中从查询中检索 Firestore 数据。我正在返回一个 QuerySnapshot。在同一个查询中,我从每个文档中更新一个“SUM”变量。但是如何使用这个 SUM 变量在文本小部件中显示?由于它是一个异步调用,因此该值不会更新。如果我在 firebase 查询中使用setState,则该值会不断增加而不会停止。

我在状态中初始化了 Sum 变量:

 double sum = 0.0;

典型的 FutureBuilder 调用查询函数。 这是我的查询:

Future<QuerySnapshot> getItems() async {

    var snapshot = await  FirebaseFirestore.instance
          .collection('Items')
          .where('time', isGreaterThan: _startofDay)
          .where('type', isEqualTo: 'food')
          .orderBy('time', descending: false)
          .get().then((value) {
            value.docs.forEach((element) {
              sum += element['price'];
            });
            return value;
     });
 }

我不想使用另一个运行相同查询并返回 Sum 值的 FutureBuilder,因为我想最小化我的 firebase 文档读取。 我只想在文本小部件中显示 Sum 值。 有什么方法可以实现吗?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:
    Future<QuerySnapshot> getItems() async {
    
        var snapshot = await  FirebaseFirestore.instance
              .collection('Items')
              .where('time', isGreaterThan: _startofDay)
              .where('type', isEqualTo: 'food')
              .orderBy('time', descending: false)
              .get().then((value) {
    
                // set sum value as 0 before for each
                setState(() => sum = 0);
    
                value.docs.forEach((element) {
    
                   // then count sum value again
                   setState(() => sum += element['price']);
                });
                return value;
         });
     }
    

    【讨论】:

    • 您好,感谢您的回复。我返回了一个 print(sum);在返回语句之前。但打印值继续打印。这是预期的吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 2021-03-03
    • 2022-01-11
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2022-01-03
    相关资源
    最近更新 更多