如何将 Kotlin 协程与 Firebase 实时数据库结合使用,并在 LiveData 和 StateFlow 之间选择嵌套对象?

问题描述 投票:0回答:0

我正在开发一个 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)
    }
android kotlin firebase-realtime-database kotlin-coroutines android-livedata
© www.soinside.com 2019 - 2024. All rights reserved.