Firebase Kotlin SDK 回调

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

我正在构建一个新的 Compose Multiplatform 项目,我想添加一些 Firestore 功能。

我添加了 Firebase Kotlin SDK:https://github.com/GitLiveApp/firebase-kotlin-sdk

# build.gradle.kts
plugins {
    alias(libs.plugins.kotlinMultiplatform)
    alias(libs.plugins.androidApplication)
    alias(libs.plugins.jetbrainsCompose)
    alias(libs.plugins.compose.compiler)
    alias(libs.plugins.googleServices)
    kotlin("plugin.serialization") version "2.0.0-RC3"
}
kotlin {
    sourceSets {
        
        androidMain.dependencies {
            implementation(compose.preview)
            implementation(libs.androidx.activity.compose)
        }
        commonMain.dependencies {
            implementation("dev.gitlive:firebase-firestore:1.12.0")
            implementation("dev.gitlive:firebase-common:1.12.0")
        }
    }
}

但我无法在 Firestore 调用中添加任何回调,例如

addSnapshotListener
addOnSuccessListener
我得到:
Unresolved reference: addSnapshotListener

suspend fun getDocument(id: String) {
    val db = Firebase.firestore
    try {
        val result = db.collection("session").document(id).get().addSnapshotListener { }
    } catch (e: Exception) {

    }
}

我想监听 FireStore 中数据的变化,并在发生变化时更新 UI。

android firebase kotlin google-cloud-platform google-cloud-firestore
1个回答
0
投票

DocumentReference#get() 方法返回 Task 类型的对象,因此您无法在此类对象上调用

addSnapshotListener
。如果你想监听特定文档的实时更新,那么你必须直接在
addSnapshotListener
对象上调用
DocumentReference
,如下所示:

suspend fun getDocument(id: String) {
    val db = Firebase.firestore
    try {
        val result = db.collection("session").document(id).addSnapshotListener{ }
    } catch (e: Exception) {

    }
}

看,我已经删除了

get()
通话。所以这是可能的,因为 addSnapshotListener() 方法属于 DocumentReference 类,而不属于 Task 类。

© www.soinside.com 2019 - 2024. All rights reserved.