android - 如何使用 Firebase 和 Kotlin 在文本 (Jetpack Compose) 中显示当前用户名?

标签 android firebase-realtime-database firebase-authentication android-jetpack-compose compose-recomposition

所以,我有一个带有用户名的 Firebase 实时数据库。应用应检索尝试登录的用户的用户名。

Firebase Realtime Database

我需要使用 Jetpack Compose 在 Text() 中显示当前用户的“名称”。到下图中&username的地方。

Where to put user's name

这是我试过的:

private val rootRef = FirebaseDatabase.getInstance().reference
private val uid = FirebaseAuth.getInstance().currentUser!!.uid
private val uidRef = rootRef.child("users").child(uid)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        MyPassTheme {
            initFirebase()
            WelcomeScreen()

            uidRef.get().addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val snapshot = task.result
                    val username = snapshot?.child("name")?.getValue(String::class.java)
                    Toast.makeText(baseContext, "$username",
                        Toast.LENGTH_SHORT).show()
                }
            }

但是在 WelcomeScreen() 中,我无法从 addOnCompleteListener 更新 $username

@Composable
private fun WelcomeScreen() {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(blue69),
    )
    Column(
        modifier = Modifier
            .height(605.dp)
            .fillMaxSize()
            .padding(5.dp),
        verticalArrangement = Arrangement.SpaceEvenly,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Card(
            shape = RoundedCornerShape(20.dp),
            elevation = 10.dp,
            modifier = paddingModifier
                .height(2.dp)
        ) {
            Text(text = widthOnTopBar, modifier = paddingModifier)
        }
    }
    Column(
        modifier = Modifier
            .padding(30.dp)
            .width(1500.dp)
            .height(270.dp)
            .fillMaxWidth()
            .wrapContentSize(Alignment.BottomCenter)
    ) {
        Text(
            modifier = Modifier,
            text = "&username",
            textAlign = TextAlign.Center,
            style = MaterialTheme.typography.h4.copy(
                shadow = Shadow(
                    offset = Offset(2f, 2f),
                    blurRadius = 1f
                ),
                color = Color.White,
                fontSize = 45.sp,
                fontFamily = montserrat_bold
            )
        )
    }

我想有一些关于数据类和 OOP 的东西,但我不知道该怎么做。

最佳答案

不确定这是否可行,但您可以尝试一下。

我们添加了一个 userName 状态,它将从您的 addOnCompleteListener 回调中更新,当它发生变化时,它将更新您的 WelcomeScreen

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        MyPassTheme {

            var userName by remember { mutableStateOf("") }
            ...
            WelcomeScreen(userName)

            uidRef.get().addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val snapshot = task.result
                    userName = snapshot?.child("name")?.getValue(String::class.java)
                    Toast.makeText(
                        baseContext, "$username",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }
        }
    }
}

和你修改过的WelcomeScreen

@Composable
private fun WelcomeScreen(userName: String) {

    ...

    Column(
         ...
    ) {
        Text(
            ...
            text = userName,
            ...
        )
    }
}

关于android - 如何使用 Firebase 和 Kotlin 在文本 (Jetpack Compose) 中显示当前用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74558197/

相关文章:

javascript - 如何在javascript中获取两个日期时间之间的时差?

PHP 和 javascript 在 Internet Explorer 和 Google Chrome 上正常工作,但在 Samsung Galaxy Android 上不能正常工作

swift - 何时在 tableView 单元格中分离 firebase 监听器?

android - 如何在flutter中使用firebase登录谷歌时检查用户是新用户还是现有用户?

Android:索引 1 处的绑定(bind)值为空

android - MediaPlayer 在单独的线程中使用 Service 或 IntentService

swift - 如果用户已存在于数据库中,则拒绝创建用户

java - 如果 NotifyDataSetChanged 不在添加数据的循环中,则不会更新

javascript - Firebase 身份验证错误 - 每当我尝试使用 google 登录时

javascript - 如何从 Firebase 管理员获取 Facebook ID?