package com.gyf.lib.uikit import androidx.compose.foundation.Image import androidx.compose.foundation.border import androidx.compose.foundation.layout.* import androidx.compose.material.Card import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp import com.gyf.lib.util.ImageUtil abstract class PersonInfoVo { abstract val name: String abstract val duty: String abstract val headImg: String abstract val desc: String } @Composable fun Profile( modifier: Modifier, personInfoVo: PersonInfoVo, duty: @Composable () -> Unit = { Text(text = personInfoVo.duty) } ) { var headImg: ImageBitmap? by remember { mutableStateOf(null) } val context = LocalContext.current LaunchedEffect(personInfoVo.headImg) { headImg = ImageUtil.getImage(context = context, personInfoVo.headImg) } Column( modifier = modifier, ) { Row( modifier = Modifier .fillMaxWidth() .weight(0.7F) .border(width = 1.dp, color = MaterialTheme.colors.onBackground), horizontalArrangement = Arrangement.SpaceBetween ) { headImg.let { if (it != null) { Image( bitmap = it, contentDescription = null, modifier = Modifier .weight(0.4F) .fillMaxHeight() ) } else { Box( modifier = Modifier .weight(0.4F) .fillMaxHeight(), contentAlignment = Alignment.Center ) { Text(text = "头像加载失败") } } } Column( modifier = Modifier .weight(0.4F) .fillMaxHeight() .border(width = 1.dp, color = MaterialTheme.colors.onBackground), verticalArrangement = Arrangement.SpaceEvenly, horizontalAlignment = Alignment.CenterHorizontally ) { Text(text = personInfoVo.name) duty() } } Spacer(modifier = Modifier.weight(0.05F)) Card( backgroundColor = MaterialTheme.colors.background, modifier = Modifier.weight(0.15F) ) { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center ) { Text(text = personInfoVo.desc) } } } }