Диалог создания 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

Другие вопросы по тегам