我正在开发一个 Android 项目,希望将 Kotlin 协程与 Firebase 实时数据库结合使用。我计划使用 addValueEventListener 但我不确定是否使用 LiveData 还是 StateFlow 来处理嵌套对象。 StateFlow 似乎更高效,但我注意到当子对象的值发生变化时它不会触发收集器。对于这种情况的最佳方法有什么建议吗?谢谢
现在我在没有协程的情况下执行此操作:
private var valueEventListener: ValueEventListener? = null
private val foodItemLiveData = MutableLiveData<CustomResponse<List<FoodItem>>>()
val foodItemList: LiveData<CustomResponse<List<FoodItem>>>
get() = foodItemLiveData
fun getFoodItemList() {
foodItemLiveData.value = CustomResponse.Loading()
valueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val foodItemList: MutableList<FoodItem> = mutableListOf()
for (foodItemSnapshot in dataSnapshot.children) {
val foodItem = foodItemSnapshot.getValue(FoodItem::class.java)
if (foodItem != null) {
foodItemList.add(foodItem)
}
}
foodItemLiveData.value = CustomResponse.Success(foodItemList)
}
override fun onCancelled(databaseError: DatabaseError) {
foodItemLiveData.value = CustomResponse.Error(databaseError.toException().message.toString())
}
}
databaseReference.addValueEventListener(valueEventListener as ValueEventListener)
}