Ниже приведена простая компонуемая функция: когда я регистрирую объект pd, она печатает текущее значение сохраненного (логического) поля. Но после инициализации переменной isChecked ее значение всегда равно !pd.retained. Поэтому состояние моего переключателя всегда неверное.
@Composable весело DocumentModalSheet( pd: PrintDocument, onSwitchSelected: (id: Long, статус: Boolean) -> Unit, ) { Log.i("DocumentModalSheet", "DocumentModalSheet: ${pd.retained}") // Это печатает правильное значение pd.retained var isChecked, помните { mutableStateOf(pd.retained) } Log.i("DocumentModalSheet", "DocumentModalSheet: $isChecked") // Это печатает неправильное значение pd.retained Столбец( модификатор = Модификатор.fillMaxWidth() ) { Switch(checked = isChecked, onCheckedChange = { isChecked = это, onSwitchSelected(pd.id, оно) } ) }} Вот как я вызываю указанную выше функцию из компонуемого PrintDocumentScreen. Когда вызывается лямбда DocumentCard, я обновляю переменную clickedPD и показываю модальный лист.
@Composable весело PrintDocumentScreen (viewModel: PrintDocumentViewModel) { val pdListFlow = viewModel.pdListFlow.collectAsState() var clickedPD, запомнив {mutableStateOf(PrintDocument()) } val modalSheetState = RememberModalBottomSheetState(..) ModalBottomSheetLayout( листСодержимое = { DocumentModalSheet (clickedPD) { viewModel.doSomething(id, статус) } }, содержание = { Scaffold(modifier = Modifier.fillMaxSize()) {paddingValues -> Столбец (модификатор = Modifier.fillMaxSize().padding(paddingValues) ) { pdListFlow.value?.let { оно -> когда это) { это Resource.Success -> { если (it.data.printDocuments.isNotEmpty()) { LazyColumn(модификатор = Modifier.fillMaxSize()) { items(it.data.printDocuments.size) { индекс -> DocumentCard(it.data.printDocuments[индекс]) { щелкнулPD = это coroutineScope.launch { модальныйSheetState.show() } } } } } еще { NoDocumentPresent() } } } } }}})} То, что я пробовал до сих пор...
Я попробовал перенести часть инициализации isChecked на PrintDocumentScreen, но это не помогло.
Я также использовала DerivedStateOf() для инициализации переменной isChecked в PrintDocumentScreen
var clickedPD, запомнив {mutableStateOf(PrintDocument()) } val isChecked, помните { производныйStateOf {clickedPD.retained} } Я заметил, что состояние переключателя является общим для всех DocumentCard, потому что, когда я проверяю переключатель, скрываю модальный лист, нажимаю на другую карту, переключатель уже выбран.
