Диалог создания Android открывается только один раз
Я начал использовать Compose в своем проекте. И я столкнулся с проблемой и не знаю, как ее решить. У меня есть список с фотографиями. Когда я нажимаю на фотографию, я показываю диалог с этой фотографией в полноэкранном режиме. На фото у меня значок рядом. Когда я нажимаю значок закрытия, диалоговое окно закрывается. Но если я снова захочу показать этот диалог, он не отобразится. Мой код:
@Composable
fun AnimalImagies(photoUrl: String) {
var dialogOpen by remember {
mutableStateOf(false)
}
if(dialogOpen){
GetBifImage(photoUrl = photoUrl)
}
val imageLoader = LocalContext.current.imageLoader.newBuilder()
.logger(DebugLogger())
.build()
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data(photoUrl)
.crossfade(true)
.build(),
imageLoader = imageLoader,
contentDescription = "",
contentScale = ContentScale.Crop,
modifier = Modifier
.size(140.dp)
.clip(RoundedCornerShape(corner = CornerSize(16.dp)))
.clickable(onClick = { dialogOpen = true })
)
}
@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun GetBifImage(photoUrl: String) {
val shouldShowDialog = remember { mutableStateOf(true) }
if (shouldShowDialog.value) {
Dialog(
properties = DialogProperties(usePlatformDefaultWidth = false),
onDismissRequest = {shouldShowDialog.value = false}
) {
Box(modifier = Modifier.fillMaxSize()) {
ZoomImage(photoUrl)
Image(painter = painterResource(id = R.drawable.ic_close_),
contentDescription = "",
modifier = Modifier
.align(Alignment.TopEnd)
.size(30.dp)
.clickable { shouldShowDialog.value=false }
)
}
}
}
}
1 ответ
Вам необходимо сбросить состояниеshouldShowDialog
кtrue
.
Я рекомендую вам создать лямбду дляGetBifImage
компонуется следующим образом:
@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun GetBifImage(photoUrl: String, onDismiss: () -> Unit) {
Dialog(
properties = DialogProperties(usePlatformDefaultWidth = false),
onDismissRequest = { onDismiss.invoke() }
) {
Box(modifier = Modifier.fillMaxSize()) {
ZoomImage(photoUrl)
Image(
painter = painterResource(id = R.drawable.ic_close_),
contentDescription = "",
modifier = Modifier
.align(Alignment.TopEnd)
.size(30.dp)
.clickable { onDismiss.invoke() }
)
}
}
}
Поэтому вам нужно изменить свой вызов наAnimalImagies
@Composable
fun AnimalImagies(photoUrl: String) {
var dialogOpen by remember { mutableStateOf(false) }
val imageLoader = LocalContext.current.imageLoader.newBuilder()
.logger(DebugLogger())
.build()
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data(photoUrl)
.crossfade(true)
.build(),
imageLoader = imageLoader,
contentDescription = "",
contentScale = ContentScale.Crop,
modifier = Modifier
.size(140.dp)
.clip(RoundedCornerShape(corner = CornerSize(16.dp)))
.clickable(onClick = {
dialogOpen = true
})
)
if (dialogOpen) {
GetBifImage(photoUrl = photoUrl) {
dialogOpen = false
}
}
}
Итак, теперь, когда вы нажимаетеImage
тогда лямбда-функция изменитсяdialogOpen