[英]How to display current username in Text (Jetpack Compose) using Firebase and Kotlin?
So, I have a Firebase Realtime Database with user's name.所以,我有一个带有用户名的 Firebase 实时数据库。 App should retrieve username of who tries to log in.
应用程序应检索尝试登录的用户名。
Firebase Realtime Database Firebase 实时数据库
I need to display current user's "name" in Text()
with Jetpack Compose.我需要使用 Jetpack Compose 在
Text()
中显示当前用户的“名称”。 To the place where &username
in the picture below.到下图中
&username
所在的地方。
Where to put user's name在哪里放置用户名
This is what I have tried:这是我试过的:
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()
}
}
But in WelcomeScreen()
I cannot update $username
from addOnCompleteListener
.但是在
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
)
)
}
I suppose there is something about data classes and OOP, but i do not know how to do it.我想有一些关于数据类和 OOP 的东西,但我不知道该怎么做。
Not sure if this would work, but you can try this.不确定这是否可行,但您可以试试这个。
We have added a userName
state that will be updated from your addOnCompleteListener
callback, and when it changes, it will update your WelcomeScreen
我们添加了一个
userName
名 state,它将从您的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()
}
}
}
}
}
and your modified WelcomeScreen
和您修改后的
WelcomeScreen
@Composable
private fun WelcomeScreen(userName: String) {
...
Column(
...
) {
Text(
...
text = userName,
...
)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.