Кнопка со значком Jetpack Compose в декораторе TextField не перекомпоновываетсяAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Кнопка со значком Jetpack Compose в декораторе TextField не перекомпоновывается

Сообщение Anonymous »

У меня возникла проблема со значком текстового поля, вложенным в декоратор. Он не обновляется при изменении isPasswordVisible. Однако часть обфускации обновляется при изменении isPasswordVisible. Я помещаю журналы прямо перед IconButton, и он не доступен при изменении isPasswordVisible.
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun PasswordTextField(
state: TextFieldState,
isPasswordVisible: Boolean,
onTogglePasswordVisibility: () -> Unit,
hint: String,
title: String?,
modifier: Modifier = Modifier
) {
var isFocused by remember {
mutableStateOf(false)
}
Column(
modifier = modifier
) {
Row(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
if (title != null) {
Text(
text = title,
style = MaterialTheme.typography.titleSmall,
)
}
}
Spacer(modifier = Modifier.height(4.dp))
BasicSecureTextField(
state = state,
textObfuscationMode = if (isPasswordVisible) {
TextObfuscationMode.Visible
} else TextObfuscationMode.Hidden,
textStyle = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.onBackground
),
cursorBrush = SolidColor(MaterialTheme.colorScheme.onBackground),
modifier = Modifier
.clip(RoundedCornerShape(16.dp))
.background(
MaterialTheme.colorScheme.surface
)
.border(
width = 1.dp,
color = Color.Transparent,
shape = RoundedCornerShape(16.dp)
)
.padding(12.dp)
.onFocusChanged {
isFocused = it.isFocused
},
decorator = { innerBox ->
Row(
modifier = Modifier
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = PasswordIcon,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface
)

Spacer(modifier = Modifier.width(16.dp))

Box(
modifier = Modifier
.weight(1f)
) {
if (state.text.isEmpty() && !isFocused) {
Text(
text = hint,
color = MaterialTheme.colorScheme.onSurface.copy(
alpha = 0.4f
),
modifier = Modifier.fillMaxWidth()
)
}
innerBox()
}

IconButton(
onClick = onTogglePasswordVisibility,
modifier = Modifier.height(24.dp)
) {
Icon(
imageVector = if (isPasswordVisible) {
EyeOpenIcon
} else {
EyeCloseIcon
},
contentDescription = if (isPasswordVisible) {
stringResource(id = R.string.show_password)
} else {
stringResource(id = R.string.hide_password)
},
tint = MaterialTheme.colorScheme.onSurface
)
}
}
}
)
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... recomposed
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»