kotlin LazyColumn项,隐式接收器无法在此上下文中调用Unit

toiithl6  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(152)

我有下一个代码,一切都很好,除了我需要把我的第二个AnswerOption放在一个lazyverticalGrid中。我不能这样做,因为它在一个lazycolumn中,这是代码

@Composable
fun AssessmentScreen(
    onClose: (String, String) -> Unit,
    relatedSubSkillIdsJson: String,
    uiState: AssessmentUiState,
    onSelectedOption: (String) -> Unit,
    onShowAnswerFeedback: (Boolean) -> Unit,
    onNextQuestion: () -> Unit,
    onCloseAssessment: () -> Unit,
    navigateToAndPop: (Pair<String, String>) -> Unit,
    goBack: () -> Unit,
    assessmentType: String,
) {
    val context = LocalContext.current
    val activity = context.findActivity()
    val navigationBarHeightDp = activity?.getNavigationBarHeightInDp() ?: 0.dp
    val blur =
        if (uiState.isLoading) dimensionResource(dimen.default_screen_blur) else 0.dp
    val currentArtiIndex = remember { mutableStateOf(0) }

    if (uiState.questions.isNotEmpty()) {
        LazyColumn(
            Modifier
                .fillMaxSize()
                .padding(
                    top = dimensionResource(dimen.default_screen_padding),
                    start = dimensionResource(dimen.default_screen_padding),
                    end = dimensionResource(dimen.default_screen_padding)
                )
                .blur(blur)
        ) {
            item {
                CloseAssessment(
                    relatedSubSkillIdsJson = relatedSubSkillIdsJson,
                    uiState = uiState,
                    questionIndex = uiState.currentQuestionIndex,
                    isAnsweredQuestion = uiState.showAnswerFeedback,
                    onCloseAssessment = { onCloseAssessment() },
                    navigateToAndPop = navigateToAndPop,
                    goBack = goBack
                )
                AssessmentTitle(artiImages[currentArtiIndex.value], assessmentType)
                QuestionDotsIndicator(uiState.questionAnswersStatus)
                AssessmentQuestion(
                    thumbnail = uiState.getCurrentQuestionItem().thumbnail,
                    question = uiState.getCurrentQuestionItem().question
                )
                Spacer(modifier = Modifier.height(20.dp))
            }

            val optionsAbcLetterDescription = ('a'..'z').toList()
                itemsIndexed(uiState.currentAnswerOptions) { index, option ->
                    if (uiState.currentAnswerOptions[index].thumbnail == ""){
                        AnswerOption(
                            selectedOptionId = uiState.selectedAnswerId,
                            showFeedback = uiState.showAnswerFeedback,
                            optionLetter = circularCharIteration(optionsAbcLetterDescription, index),
                            option = option,
                            onSelectedOption = { onSelectedOption(it) }
                        )
                    }else{
                        AnswerOption(
                            selectedOptionId = uiState.selectedAnswerId,
                            showFeedback = uiState.showAnswerFeedback,
                            optionLetter = circularCharIteration(optionsAbcLetterDescription, index),
                            option = option,
                            onSelectedOption = { onSelectedOption(it) }
                        )
                    }
                }
            item {
                ChallengeBtn(
                    modifier = Modifier
                        .padding(bottom = navigationBarHeightDp + dimensionResource(dimen.default_screen_padding)),
                    uiState = uiState,
                    navigateToAndPop = navigateToAndPop,
                    onShowAnswerFeedback = { onShowAnswerFeedback(it) },
                    onCloseAssessment = { onCloseAssessment() },
                    onNextQuestion = {
                        if (!uiState.isLastQuestion) {
                            currentArtiIndex.value =
                                nextArtiImage(currentArtiIndex.value)
                            onNextQuestion()
                        }
                    } ,
                    relatedSubSkillIdsJson = relatedSubSkillIdsJson,
                )
            }
        }
    }
    ProgressBarComponentComposable(isLoading = uiState.isLoading)

你知道怎么做吗?

a11xaf1n

a11xaf1n1#

将其 Package 在item{…}块内

...    

val optionsAbcLetterDescription = ('a'..'z').toList()
itemsIndexed(uiState.currentAnswerOptions) { index, option ->
if (uiState.currentAnswerOptions[index].thumbnail == "") {
       
     this@LazyColumn.item {  // item block
         AnswerOption(
            ...
         )
     }
               
} else {
      
     this@LazyColumn.item { // item block
         AnswerOption(
             ...
         ) 
     }
}
  
...

也可以将AnswerOption作为LazyItemScope的扩展,

@Composable
fun LazyItemScope.AnswerOption() {...}

你可以这样简单地调用它

...    

val optionsAbcLetterDescription = ('a'..'z').toList()
itemsIndexed(uiState.currentAnswerOptions) { index, option ->
if (uiState.currentAnswerOptions[index].thumbnail == "") {
       
     
      AnswerOption(
         ...
      )
    
               
} else {
      
   
      AnswerOption(
          ...
      ) 
     
}
  
...

相关问题