[英] Fetching photos from Firebase Cloud Storage causes flickering on Android Jetpack Compose
我正在使用Kotlin开发一款Android应用程序.我需要在屏幕上显示云存储中的图片.现在,图片会显示,但它们会闪烁.我找不到用Kotlin 写的信息,我也不知道为什么会发生这种情况. 这是我目前的代码.
@Composable
fun UserInfo(navController: NavController, name: String, uid: String) {
val storage = Firebase.storage
val userRef = storage
.reference
.child("users/${uid}/photos")
.child(name)
var bitmap by remember { mutableStateOf<Bitmap?>(null) }
val ONE_MEGABYTE: Long = 1024 * 1024
userRef.getBytes(ONE_MEGABYTE).addOnSuccessListener {
bitmap = BitmapFactory.decodeByteArray(it, 0, it.size)
}
...
if (userRef != null) {
Image(
painter = rememberImagePainter(bitmap),
contentScale = ContentScale.FillBounds,
contentDescription = null,
modifier = Modifier
.width(100.dp)
.height(100.dp)
.clip(CircleShape)
)
...
有人能帮帮我吗?谢谢.
我已经把代码移到了存储类,就像这样.
class Storage {
val storage = Firebase.storage
@Composable
fun GetPhoto(uid: String, name: String): Bitmap? {
val userRef = storage.reference
.child("users/${uid}/photos")
.child(name)
var bitmap by remember { mutableStateOf<Bitmap?>(null) }
val ONE_MEGABYTE: Long = 1024 * 1024
userRef.getBytes(ONE_MEGABYTE).addOnSuccessListener {
bitmap = BitmapFactory.decodeByteArray(it, 0, it.size)
}
return bitmap
}
}
这是UserInfo View Now.
@Composable
fun UserInfo(navController: NavController, name: String, uid: String) {
...
storage.GetPhoto(uid, name)
val bitmap =
Image(
painter = rememberImagePainter(storage.GetPhoto(uid, name)),
contentScale = ContentScale.FillBounds,
...
这是我的UserInfo View的全部代码.
@Composable
fun UserInfo(navController: NavController, name: String, uid: String) {
val storage = Storage()
Column(
modifier = Modifier
.background(Beige)
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Row(
modifier = Modifier
.fillMaxWidth()
.weight(1f),
horizontalArrangement = Arrangement.Center
)
{
storage.GetPhoto(uid, name)
Image(
painter = rememberImagePainter(storage.GetPhoto(uid, name)),
contentScale = ContentScale.FillBounds,
contentDescription = null,
modifier = Modifier
.width(100.dp)
.height(100.dp)
.clip(CircleShape)
)
}
Row(
modifier = Modifier
.fillMaxWidth()
.weight(1f),
horizontalArrangement = Arrangement.Center
)
{
Button(modifier = Modifier.wrapContentWidth(),
colors = ButtonDefaults.textButtonColors(
backgroundColor = Pink,
contentColor = Brown,
disabledContentColor = Color.LightGray
),
onClick = {
navController.navigate("PostHistory")
}
) {
Text(text = "Posts", fontSize = 20.sp)
}
}