Flutter Flatter Firebase查询-在文本小部件中显示设置值

Flutter Flatter Firebase查询-在文本小部件中显示设置值,flutter,dart,Flutter,Dart,我有一个简单的FutureBuilder,在这里我从查询中检索Firestore数据。我要回一张QuerySnapshot。在同一个查询中,im更新每个文档中的“SUM”变量。但是如何使用这个SUM变量在文本小部件中显示呢?因为它是一个异步调用,所以该值不会更新。如果我在firebase查询中使用setState,则该值将不停地添加 我已将Sum变量初始化为以下状态: double sum = 0.0; 典型的FutureBuilder调用查询函数。 我的问题是: Future<Que

我有一个简单的
FutureBuilder
,在这里我从查询中检索Firestore数据。我要回一张QuerySnapshot。在同一个查询中,im更新每个文档中的“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;
     });
 }
Future getItems()异步{
var snapshot=等待FirebaseFirestore.instance
.collection('项目')
.where('time',大于:_startofDay)
.where('type',isEqualTo:'food')
.orderBy('time',降序:false)
.get().then((值){
value.docs.forEach((元素){
总和+=元素[‘价格’];
});
返回值;
});
}
我不想使用另一个FutureBuilder运行相同的查询并返回总和值,因为我想最小化我的firebase文档读取。 我只想在文本小部件中显示总和值。 有什么方法可以实现这一点吗?

Future getItems()异步{
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;
     });
 }
var snapshot=等待FirebaseFirestore.instance .collection('项目') .where('time',大于:_startofDay) .where('type',isEqualTo:'food') .orderBy('time',降序:false) .get().then((值){ //之前,将每个值的总和设置为0 设置状态(()=>sum=0); value.docs.forEach((元素){ //然后再次计算和值 设置状态(()=>sum+=element['price']); }); 返回值; }); }
Hi Thanx,谢谢回复。我已返回打印件(金额);在return语句之前。但打印值会继续打印。这是预期的吗?