flutter - Flutter Firebase 查询 - 在文本小部件中显示设置值
问题描述
我有一个简单的FutureBuilder
地方,我从查询中检索 Firestore 数据。我正在返回一个 QuerySnapshot。在同一个查询中,我从每个文档中更新一个“SUM”变量。但是如何使用这个 SUM 变量在文本小部件中显示?由于它是一个异步调用,因此该值不会更新。如果我setState
在 firebase 查询中使用,该值会不断添加而不会停止。
我在状态下初始化了 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 Value 的 FutureBuilder,因为我想最小化我的 firebase 文档读取。我只想在文本小部件中显示 Sum 值。有什么办法可以做到这一点?
解决方案
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;
});
}
推荐阅读
- windows - 在 Windows 中删除具有相同名称但不同文件扩展名的文件差异的最快方法
- javascript - 如何将元素添加到对象中以及如何在 javascript 中测试复杂对象中值的存在?
- spring-cloud - 问题测试spring cloud SQS Listener
- python - GitPython 检查 git pull 是否更改了本地文件
- java - Java - 具有泛型类参数的构造函数
- sql - SQL查询以获取每天的最大值
- markdown - 内联 mathjax 公式后不需要的单词中断
- c# - 如何将现有的 OwinMiddleware 集成到 .Net Core 2.0 应用程序管道中?
- linux - 由 C 程序设置的环境变量,无法从 bash 脚本中检索
- ios - 查看设备使用 Swift 连接到我的 wifi 路由器并允许/阻止 wifi 访问