firebase - 检查 Firebase 中是否存在文档并根据图标返回
问题描述
我想检查 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,
),
)
这个说法的问题在哪里?有任何想法吗?
解决方案
根据您的用例,您可以使用FutureBuilder,或者保持简单并创建一个变量来处理逻辑:
在您的小部件内部:
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)
编辑:由于您显然正在处理值列表,因此将它们封装在 Object 中或使用 FutureBuilder 是有意义的。
推荐阅读
- html - a的css样式属性是什么
element?
- visual-studio-code - Browser refreshes html file twice when using Visual Studio Code with Live Server or Browser-Sync
- python - 如何在 pandas DataFrame 中添加 * 或 * 更新列?
- java - Visual Studio Code 对 Derby 数据库的 JDBC 访问
- elasticsearch - 批量加载:确保完成所有 BulkProcessor 作业(Java 客户端 API)
- c# - 在 ContentDialog 中按一个键
- hibernate - 如何从spring数据或休眠中调用oracle程序
- android - 在 Android 中以编程方式更改语言不适用于从 App 包格式生成的 APK
- python - 如何检测电报机器人中的命令(在python中)
- java - GC(分配失败)[PSYoungGen]