Raf*_*dal 6 navigation android kotlin android-jetpack-compose
当在 中调用我的可组合项时NavGraph,我遇到问题,它重复 3 次,有时甚至更多次。我查看了拨打电话的位置,但没有看到任何循环或其他东西。
NavGraph
fun NavGraphBuilder.addScheduleDetails(
navController: NavHostController,
userDataViewModel: UserDataViewModel,
titulos: MutableState<String>,
datosViewModel: DatosViewModel,
){
val animationState = mutableStateOf(true)
composable(route = MainDestinations.SCHEDULE_DETAILS_ROUTE+"/{${NavArguments.NOMBRE_HORARIO}}")
{backStackEntry ->
Log.w("Call", "ScheduleDetails")
titulos.value = backStackEntry.arguments?.getString(NavArguments.NOMBRE_HORARIO)!!+" "
val actions = MainActions(navController = navController)
DetallesHorarioScreen(
nombreHorario = backStackEntry.arguments?.getString(NavArguments.NOMBRE_HORARIO),
userDataViewModel = userDataViewModel,
onNavToAddSubject = actions.navigateToAgregarMateria,
datosViewModel = datosViewModel,
animationState = animationState
)
}
}
Run Code Online (Sandbox Code Playgroud)
从日志打印
2022-01-06 19:57:01.548 30533-30533/horarios W/Call: ScheduleDetails
2022-01-06 19:57:01.613 30533-30533/horarios W/Call: ScheduleDetails
2022-01-06 19:57:01.987 30533-30533/horarios W/Call: ScheduleDetails
Run Code Online (Sandbox Code Playgroud)
拨电至composable(route = MainDestinations.SCHEDULE_DETAILS_ROUTE ...)
Card(
modifier = Modifier
.fillMaxWidth()
.height(80.dp)
.padding(10.dp)
.clickable { onNavToHorario(nombre) }, //Call to navigator
border = BorderStroke(width = 1.dp, color = primaryColorCustom),
shape = RoundedCornerShape(10),
backgroundColor = Color.White,
elevation = 4.dp
) {...}
Run Code Online (Sandbox Code Playgroud)
onNavToHorario()
val actions = MainActions(navController = navController)
(...)
onNavToHorario = actions.navigateToHorario
Run Code Online (Sandbox Code Playgroud)
MainActions()
class MainActions(navController: NavHostController){
val navigateToHorario:(String) -> Unit = {nomHorario: String ->
navController.navigate(route = MainDestinations.SCHEDULE_DETAILS_ROUTE+"/${nomHorario}")
}
}
Run Code Online (Sandbox Code Playgroud)
在其他情况下,我遇到了类似的问题,并且发生了动画,但我已经删除了所有动画,NavGraph但问题仍然存在
ian*_*ake 12
导航总是交叉淡入淡出目的地,因此每个屏幕总是会多次重新组合。根据Thinking in Compose 指南,这是预期的:
在某些情况下,可组合函数可能会针对 UI 动画的每一帧运行。如果该函数执行昂贵的操作(例如从设备存储中读取),则该函数可能会导致 UI 卡顿。
您没有做任何错误(作为组合的一部分,您没有触发副作用),所以您的代码已经很好了。
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |