【发布时间】:2019-09-16 15:28:21
【问题描述】:
我想检查 Firebase 集合中是否存在特定文档。据此,我的应用程序应显示彩色图标或灰色图标。我正在尝试用一个返回布尔值的方法来解决这个问题。在我的 Build Widget 中,我调用该方法并分配正确的图标。
这是我检查文档是否存在的方法:
checkIfLikedOrNot(reference) async{
DocumentSnapshot ds = await reference.collection("likes").document(currentUser.uid).get();
print(ds.exists);
return ds.exists;
}
打印在控制台中显示了正确的值,但我的构建小部件似乎忽略了一个事实,即布尔值是 true 并且总是返回应该在集合中没有文档时显示的图标。
这是我的构建小部件的一部分:
GestureDetector(
child: checkIfLikedOrNot(list[index].reference) == true
?
Icon(
Icons.favorite,
color: Colors.red,
)
:
Icon(
FontAwesomeIcons.heart,
color: null,
),
)
这句话的问题在哪里?有什么想法吗?
【问题讨论】:
-
您确定可以在这样的构造函数中使用异步函数吗?异步函数不会立即返回其最终结果。
-
不,我完全不确定 :D 你知道我如何在没有异步的情况下重写函数吗?
-
不,Firestore API 都是异步的。在使用结果之前,您必须等待查询完成。
-
如何等待查询?我认为 await 可以处理......
-
即使你的函数中有 await ,你的函数仍然返回未来,因为它被标记为异步。在这种情况下,我会做的是,在 init 状态下调用函数,等待它的结果,然后使用 setState 将其设置为您的状态中的某个变量。然后在手势检测器的三元运算符中使用它。
标签: firebase flutter google-cloud-firestore conditional-statements