Mar*_*ert 6 conditional-statements firebase flutter google-cloud-firestore
我想检查 Firebase 集合中是否存在特定文档。据此,我的应用程序应该显示一个彩色图标或灰色图标。我试图用一种方法来解决这个问题,它返回一个布尔值。在我的 Build Widget 中,我调用该方法并分配正确的图标。
这是我检查文档是否存在的方法:
checkIfLikedOrNot(reference) async{
DocumentSnapshot ds = await reference.collection("likes").document(currentUser.uid).get();
print(ds.exists);
return ds.exists;
}
Run Code Online (Sandbox Code Playgroud)
打印在控制台中显示了正确的值,但我的构建小部件似乎忽略了一个事实,即布尔值为 true 并始终返回应该在集合中没有文档时显示的图标。
这是我的构建小部件的一部分:
GestureDetector(
child: checkIfLikedOrNot(list[index].reference) == true
?
Icon(
Icons.favorite,
color: Colors.red,
)
:
Icon(
FontAwesomeIcons.heart,
color: null,
),
)
Run Code Online (Sandbox Code Playgroud)
这个说法哪里有问题?有任何想法吗?
根据您的用例,您可以使用FutureBuilder,或者保持简单并创建一个变量来处理逻辑:
在您的小部件内:
bool isLiked = false;
Run Code Online (Sandbox Code Playgroud)
从 initState() 中调用您的函数:
@override
void initState() {
super.initState();
checkIfLikedOrNot();
}
Run Code Online (Sandbox Code Playgroud)
更改逻辑以修改变量并告诉 Flutter 重新渲染:
checkIfLikedOrNot() async{
DocumentSnapshot ds = await reference.collection("likes").document(currentUser.uid).get();
this.setState(() {
isLiked = ds.exists;
});
}
Run Code Online (Sandbox Code Playgroud)
绘制相应的Icon:
Icon(isLiked?Icons.favorite:FontAwesomeIcons.heart,
color: isLiked?Colors.red:null)
Run Code Online (Sandbox Code Playgroud)
编辑:由于您显然正在处理一系列值,因此将它们封装在一个对象中或使用 FutureBuilder 是有意义的。
| 归档时间: |
|
| 查看次数: |
7049 次 |
| 最近记录: |