gpt4 book ai didi

firebase - 检查Firebase中是否存在文档并根据图标返回

转载 作者:IT王子 更新时间:2023-10-29 07:20:37 25 4
gpt4 key购买 nike

我想检查某个特定文档是否存在于 Firebase 集合中。据此,我的应用程序应显示彩色图标或灰色图标。我试图用一个返回 bool 值的方法来解决这个问题。在我的 Build Widget 中,我调用该方法并分配正确的图标。

这是我检查文档是否存在的方法:

checkIfLikedOrNot(reference) async{
DocumentSnapshot ds = await reference.collection("likes").document(currentUser.uid).get();
print(ds.exists);
return ds.exists;
}

打印在控制台中显示了正确的值,但我的构建小部件似乎忽略了一个事实,即 bool 值是 true,并且如果集合中没有文档,则始终返回应显示的图标。

这是我的 Build Widget 的一部分:

 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)

编辑:由于您显然是在处理值列表,因此将它们封装在对象中或使用 FutureBuilder 是有意义的。

关于firebase - 检查Firebase中是否存在文档并根据图标返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55879077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com