我想检查 Firebase 集合中是否存在特定文档。据此,我的应用程序应该显示一个彩色图标或灰色图标。我试图用一个返回布尔值的方法来解决这个问题。在我的构建小部件中,我调用该方法并分配正确的图标。
这是我检查文档是否存在的方法:
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,
),
)
这个说法的问题出在哪里呢?有任何想法吗?
根据您的用例,您可以使用未来建造者,或者您保持简单并创建一个变量来处理逻辑:
在你的小部件内:
bool isLiked = false;
从 initState() 中调用您的函数:
@override
void initState() {
super.initState();
checkIfLikedOrNot();
}
改变你的逻辑来修改你的变量并告诉 Flutter 重新渲染:
checkIfLikedOrNot() async{
DocumentSnapshot ds = await reference.collection("likes").document(currentUser.uid).get();
this.setState(() {
isLiked = ds.exists;
});
}
绘制对应的Icon:
Icon(isLiked?Icons.favorite:FontAwesomeIcons.heart,
color: isLiked?Colors.red:null)
编辑:由于您显然正在处理值列表,因此将它们封装在对象中或使用 FutureBuilder 是有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)