Вызовы @Composable могут происходить только в контексте функции @Composable. Составная функция для LauchedEffect ⇐ Android
Вызовы @Composable могут происходить только в контексте функции @Composable. Составная функция для LauchedEffect
Я новичок в сочинении, и у меня возникла проблема, которую я не знаю, как решить.
Вот моя проблема: я работаю над системой, которая читает документ через внешнее устройство. У меня 2 разных экрана. Один из них — это экран, на котором завершается процесс чтения (ScanDocument), а другой — экран, на котором отображается информация о завершении чтения (SuccesError). Когда я получаю сообщение об ошибке, мое приложение отображает экран SucessError, и через несколько секунд я хочу вернуться к ScanDocument, но то, как я это делаю, выдает эту ошибку >@Composable вызовы могут происходить только из контекста @Composable функции. Как я могу сделать то, что собираюсь сделать?
вот код обеих страниц:
@Composable веселое сканирование документов( идентификатор сообщения: Int, showSpinner: логическое значение, onCancel: () -> Единица, inactivityTimer: IInactivityViewModel, идентификатор анимации: Int, ) { Столбец( вертикальное расположение = расположение. пространство между, модификатор = Модификатор .ширина(800.dp) .height(1280.dp) ) { Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(800.dp) .height(136.dp) .padding(начало = 32.dp, верх = 32.dp, конец = 32.dp, низ = 32.dp) ) { Столбец( вертикальныйArrangement = Arrangement.spacedBy(56.dp, Alignment.Top), HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(736.дп) .height(72.dp) ) { Ряд( Модификатор .ширина(736.дп) .height(72.dp), HorizontalArrangement = Arrangement.SpaceBetween, вертикальноеВыравнивание = Выравнивание.Верх, ) { Spacer(Modifier.weight(1f)) EESCancelButton( onClick = onCancel, модификатор = Модификатор .ширина(122.дп) .height(72.dp), viewModel = inactivityTimer ) } } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .weight(2f, ложь) .ширина(800.dp) .height(800.dp) ) { Коробка { ExoplayerExample (идентификатор анимации) если (showSpinner) { ЦиркулярПрогрессИндикатор( модификатор = Модификатор .padding(150.dp) .размер(200.dp), ходWidth = 20.dp ) } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, ГоризонтальноеВыравнивание = Выравнивание.Начало, модификатор = Модификатор .ширина(800.dp) .height(150.dp) ) { Ряд( HorizontalArrangement = Arrangement.spacedBy( 0.дп, Alignment.CenterHorizontally ), вертикальноеВыравнивание = Выравнивание.ЦентрВертикально, модификатор = Модификатор .ширина(800.dp) .height(150.dp) .weight(1f, ложь) .background(color = Color(0xFF0E3183)) .padding(начало = 32.dp, верх = 15.dp, конец = 32.dp, низ = 15.dp) ) { Текст( текст = stringResource (id = messageId), стиль = ТекстСтиль( размер шрифта = 30.sp, FontFamily = FontFamily(Шрифт(R.font.avenir_black)), FontWeight = FontWeight(900), цвет = Цвет (0xFFFFFFFF), ) ) } } } }} ScessError
@Composable весело SuccesError( цвет: Длинный, текст: Int, навконтроллер: НавХостконтроллер, passeportOrVisa:String ) { Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, модификатор = Модификатор .ширина(800.dp) .height(1280.dp) .фон( кисть = Brush.verticalGradient( цвета = списокOf( Цвет (цвет), Цвет (0xFFFFFFFF), ) ) ) ) { Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(800.dp) .height(136.dp) .padding(начало = 32.dp, верх = 32.dp, конец = 32.dp, низ = 32.dp) ) { Столбец( вертикальныйArrangement = Arrangement.spacedBy(56.dp, Alignment.Top), HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(736.дп) .height(72.dp) ) { Ряд( Модификатор .ширина(736.дп) .height(72.dp), HorizontalArrangement = Arrangement.SpaceBetween, вертикальноеВыравнивание = Выравнивание.Верх, ) { } } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .weight(2f, ложь) .ширина(800.dp) .height(800.dp) ) { Коробка { if(passeportOrVisa == "паспорт"){ Изображение( художник = PainterResource(id = R.drawable.passport), contentDescription = "паспорт" ) }иначе если (passeportOrVisa == "виза"){ Изображение( художник = PainterResource(id = R.drawable.visa), модификатор = Modifier.padding(top = 170.dp), contentDescription = "паспорт" ) } когда (цвет) { 0xFF219653 -> {Изображение( художник = PainterResource (id = R.drawable.valid), contentDescription = "паспорт", модификатор = Modifier.padding(начало = 265.dp, верх = 140.dp, низ = 150.dp) )} 0xFFEA0028 -> {Изображение( художник = PainterResource(id = R.drawable.invalid), contentDescription = "паспорт", модификатор = Modifier.padding(начало = 212.dp, верх = 140.dp, низ = 150.dp) )} } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, ГоризонтальноеВыравнивание = Выравнивание.Начало, модификатор = Модификатор .ширина(800.dp) .height(150.dp) ) { Ряд( HorizontalArrangement = Arrangement.spacedBy( 0.дп, Alignment.CenterHorizontally ), вертикальноеВыравнивание = Выравнивание.ЦентрВертикально, модификатор = Модификатор .ширина(800.dp) .height(150.dp) .weight(1f, ложь) .background(color = Цвет(цвет)) .padding(начало = 32.dp, верх = 15.dp, конец = 32.dp, низ = 0.dp) ) { Текст( текст = stringResource (идентификатор = текст), стиль = ТекстСтиль( размер шрифта = 30.sp, FontFamily = FontFamily(Шрифт(R.font.avenir_black)), FontWeight = FontWeight(900), цвет = Цвет (0xFFFFFFFF), ) ) } } } } LaunchedEffect (истина) { когда (цвет) { 0xFF219653 -> Настройки().isPassportOk = true 0xFFEA0028 -> Настройки().isPassportOk = false } задержка(3000) if(passeportOrVisa == "паспорт"){ если (цвет == 0xFF219653) { navController.navigate(NAVIGATE_TO_IDENTITY_CARD) }еще{ СканироватьДокумент( R.string.passport_scan_message, ЛОЖЬ, onCancel, viewModel.inactivityTimer, паспортAnimationId, ) ) // navController.navigate(NAVIGATE_TO_SCAN_PASSPORT) } } иначе if(passeportOrVisa == "виза"){ если (цвет == 0xFF219653) { navController.navigate(NAVIGATE_TO_FACE_PICTURE_WARNING) }еще{ navController.navigate(NAVIGATE_TO_SCAN_VISA) } } }}
Я новичок в сочинении, и у меня возникла проблема, которую я не знаю, как решить.
Вот моя проблема: я работаю над системой, которая читает документ через внешнее устройство. У меня 2 разных экрана. Один из них — это экран, на котором завершается процесс чтения (ScanDocument), а другой — экран, на котором отображается информация о завершении чтения (SuccesError). Когда я получаю сообщение об ошибке, мое приложение отображает экран SucessError, и через несколько секунд я хочу вернуться к ScanDocument, но то, как я это делаю, выдает эту ошибку >@Composable вызовы могут происходить только из контекста @Composable функции. Как я могу сделать то, что собираюсь сделать?
вот код обеих страниц:
@Composable веселое сканирование документов( идентификатор сообщения: Int, showSpinner: логическое значение, onCancel: () -> Единица, inactivityTimer: IInactivityViewModel, идентификатор анимации: Int, ) { Столбец( вертикальное расположение = расположение. пространство между, модификатор = Модификатор .ширина(800.dp) .height(1280.dp) ) { Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(800.dp) .height(136.dp) .padding(начало = 32.dp, верх = 32.dp, конец = 32.dp, низ = 32.dp) ) { Столбец( вертикальныйArrangement = Arrangement.spacedBy(56.dp, Alignment.Top), HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(736.дп) .height(72.dp) ) { Ряд( Модификатор .ширина(736.дп) .height(72.dp), HorizontalArrangement = Arrangement.SpaceBetween, вертикальноеВыравнивание = Выравнивание.Верх, ) { Spacer(Modifier.weight(1f)) EESCancelButton( onClick = onCancel, модификатор = Модификатор .ширина(122.дп) .height(72.dp), viewModel = inactivityTimer ) } } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .weight(2f, ложь) .ширина(800.dp) .height(800.dp) ) { Коробка { ExoplayerExample (идентификатор анимации) если (showSpinner) { ЦиркулярПрогрессИндикатор( модификатор = Модификатор .padding(150.dp) .размер(200.dp), ходWidth = 20.dp ) } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, ГоризонтальноеВыравнивание = Выравнивание.Начало, модификатор = Модификатор .ширина(800.dp) .height(150.dp) ) { Ряд( HorizontalArrangement = Arrangement.spacedBy( 0.дп, Alignment.CenterHorizontally ), вертикальноеВыравнивание = Выравнивание.ЦентрВертикально, модификатор = Модификатор .ширина(800.dp) .height(150.dp) .weight(1f, ложь) .background(color = Color(0xFF0E3183)) .padding(начало = 32.dp, верх = 15.dp, конец = 32.dp, низ = 15.dp) ) { Текст( текст = stringResource (id = messageId), стиль = ТекстСтиль( размер шрифта = 30.sp, FontFamily = FontFamily(Шрифт(R.font.avenir_black)), FontWeight = FontWeight(900), цвет = Цвет (0xFFFFFFFF), ) ) } } } }} ScessError
@Composable весело SuccesError( цвет: Длинный, текст: Int, навконтроллер: НавХостконтроллер, passeportOrVisa:String ) { Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, модификатор = Модификатор .ширина(800.dp) .height(1280.dp) .фон( кисть = Brush.verticalGradient( цвета = списокOf( Цвет (цвет), Цвет (0xFFFFFFFF), ) ) ) ) { Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(800.dp) .height(136.dp) .padding(начало = 32.dp, верх = 32.dp, конец = 32.dp, низ = 32.dp) ) { Столбец( вертикальныйArrangement = Arrangement.spacedBy(56.dp, Alignment.Top), HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .ширина(736.дп) .height(72.dp) ) { Ряд( Модификатор .ширина(736.дп) .height(72.dp), HorizontalArrangement = Arrangement.SpaceBetween, вертикальноеВыравнивание = Выравнивание.Верх, ) { } } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, HorizontalAlignment = Alignment.CenterHorizontally, модификатор = Модификатор .weight(2f, ложь) .ширина(800.dp) .height(800.dp) ) { Коробка { if(passeportOrVisa == "паспорт"){ Изображение( художник = PainterResource(id = R.drawable.passport), contentDescription = "паспорт" ) }иначе если (passeportOrVisa == "виза"){ Изображение( художник = PainterResource(id = R.drawable.visa), модификатор = Modifier.padding(top = 170.dp), contentDescription = "паспорт" ) } когда (цвет) { 0xFF219653 -> {Изображение( художник = PainterResource (id = R.drawable.valid), contentDescription = "паспорт", модификатор = Modifier.padding(начало = 265.dp, верх = 140.dp, низ = 150.dp) )} 0xFFEA0028 -> {Изображение( художник = PainterResource(id = R.drawable.invalid), contentDescription = "паспорт", модификатор = Modifier.padding(начало = 212.dp, верх = 140.dp, низ = 150.dp) )} } } Столбец( вертикальноеArrangement = Arrangement.SpaceBetween, ГоризонтальноеВыравнивание = Выравнивание.Начало, модификатор = Модификатор .ширина(800.dp) .height(150.dp) ) { Ряд( HorizontalArrangement = Arrangement.spacedBy( 0.дп, Alignment.CenterHorizontally ), вертикальноеВыравнивание = Выравнивание.ЦентрВертикально, модификатор = Модификатор .ширина(800.dp) .height(150.dp) .weight(1f, ложь) .background(color = Цвет(цвет)) .padding(начало = 32.dp, верх = 15.dp, конец = 32.dp, низ = 0.dp) ) { Текст( текст = stringResource (идентификатор = текст), стиль = ТекстСтиль( размер шрифта = 30.sp, FontFamily = FontFamily(Шрифт(R.font.avenir_black)), FontWeight = FontWeight(900), цвет = Цвет (0xFFFFFFFF), ) ) } } } } LaunchedEffect (истина) { когда (цвет) { 0xFF219653 -> Настройки().isPassportOk = true 0xFFEA0028 -> Настройки().isPassportOk = false } задержка(3000) if(passeportOrVisa == "паспорт"){ если (цвет == 0xFF219653) { navController.navigate(NAVIGATE_TO_IDENTITY_CARD) }еще{ СканироватьДокумент( R.string.passport_scan_message, ЛОЖЬ, onCancel, viewModel.inactivityTimer, паспортAnimationId, ) ) // navController.navigate(NAVIGATE_TO_SCAN_PASSPORT) } } иначе if(passeportOrVisa == "виза"){ если (цвет == 0xFF219653) { navController.navigate(NAVIGATE_TO_FACE_PICTURE_WARNING) }еще{ navController.navigate(NAVIGATE_TO_SCAN_VISA) } } }}
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка: «Вызовы @Composable могут происходить только из контекста функции @Composable»
Anonymous » » в форуме Android - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-