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


Изображение

Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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