#android #kotlin #kotlin-coroutines #android-jetpack-compose
Вопрос:
/** Так как будет более одной кнопки, которая может открыть диалоговое окно. Например, кнопка социальных сетей, которая открывает окно другого стиля . Номер телефона, где вы можете увидеть номер телефона..и т.д. Поэтому я хочу иметь только одну функцию, в которой есть все подробности, касающиеся диалога, чем каждая кнопка будет обновлять переменную и передавать ее в функцию диалога. */
@Composable
fun CardSell(modifier: Modifier = Modifier){
val (showDialog, setShowDialog) = remember { mutableStateOf(false) }
var setDialogTitle : String = "" //Update this variable
val padding = 9.dp
val scope = rememberCoroutineScope()
Column(Modifier
.clickable(onClick = {})) {
Row(verticalAlignment = Alignment.CenterVertically) {
Card(elevation = 4.dp) {
Column {
Row(modifier = Modifier.padding(all = 8.dp)){
Image(
painter = painterResource(id = R.drawable.ic_launcher_foreground),
contentDescription = "Contact Profile Picture",
modifier = Modifier
.size(40.dp)
.clip(CircleShape)
)
}
Row(modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceEvenly){
IconButton(
onClick = {
setShowDialog(true)
scope.launch {
setDialogTitle = "Phone Number: ${user.contact.phoneNumber}"
delay(100)
}
},
) { //Phone Icon
Icon(
Icons.Filled.Phone,
contentDescription = "Phone Number"
)
}
}
}
DialogDemo(showDialog, setShowDialog, setDialogTitle)
}
}
}
}
}
Комментарии:
1. Вы хотите изменить
setDialogTitle
переменную откуда? Я предполагаю , что вы хотите передать его вDialogDemo
, но откуда его изменить? Разрабатывать
Ответ №1:
В compose вы никогда не захотите использовать локальную переменную без remember
, это не сохранит ее состояние после перекомпозиции
Вы можете объявить это тремя способами:
- Имея как сеттера, так и геттера, как вы сделали с
showDialog
val (value, setValue) = remember { mutableStateOf("") }
- Имея один
MutableState
val
// declare
val setDialogTitle = remember { mutableStateOf("") }
// read/write
setDialogTitle.value = "new value"
- Использование делегированного свойства. Я нахожу его самым чистым:
// declare
var setDialogTitle by remember { mutableStateOf("") }
// read/write
setDialogTitle = "new value"
Ознакомьтесь с дополнительной документацией
Комментарии:
1. Большое вам спасибо за помощь