【发布时间】:2022-10-25 23:55:31
【问题描述】:
重新启动应用程序后,我正在尝试保存按钮的状态。一切正常,点击后心形按钮变为红色,但是当我重新启动应用程序时,它会恢复到默认状态。我想将它存储在我的 Firebase Firestore 中。
我最喜欢的按钮:
fun FavoriteButton(shoe : ShoeModel){
val myviewModel : FirebaseFirestoreVM =
viewModel(LocalContext.current as ViewModelStoreOwner, key = shoe.shoeName)
val isFavorite = myviewModel.isFavorite
IconToggleButton(
checked = isFavorite.value ,
onCheckedChange = {
isFavorite.value = !isFavorite.value
}
) {
Icon(
imageVector = if (isFavorite.value) {
Icons.Filled.Favorite
} else {
Icons.Filled.FavoriteBorder
}, contentDescription = null, tint = MaterialTheme.colors.primary
)
}
if (isFavorite.value) {
myviewModel.addToDatabase(shoe)
}
}
我的视图模型
val isFavorite : MutableState<Boolean> = mutableStateOf(false)
fun addToDatabase(shoe : ShoeModel){
val obj = ShoeModel(
shoe.shoeName,
shoe.shoeImage,
shoe.shoeDescription,
shoe.shoePrice,
shoe.shoeFrontSide,
shoe.shoeBackSide,
shoe.shoeSide,
shoe.isFavorite
)
db.collection("shoes").document(shoe.shoeName).set(obj)
}
【问题讨论】:
-
您在
viewmodel中将isFavorite的默认值分配为false。所以每次应用程序启动时都会选择它。您可以通过迭代db集合来初始化isFavorite的值,无论对应的shoe是否存在。不要为每个FavoriteButton迭代db寻找一种有效的方法,或者将您最初检索到的数据集复制到viewmodels 局部变量中[如果可能的话]。 -
你能给我一个例子来说明我如何实现它吗?
-
例如...?
标签: android kotlin google-cloud-firestore android-jetpack-compose jetpack