MutableStateOf не инициализируется повторно в Jetpack ComposeAndroid

Форум для тех, кто программирует под Android
Гость
MutableStateOf не инициализируется повторно в Jetpack Compose

Сообщение Гость »


Ниже приведена простая компонуемая функция: когда я регистрирую объект 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, потому что, когда я проверяю переключатель, скрываю модальный лист, нажимаю на другую карту, переключатель уже выбран.


Изображение

Вернуться в «Android»