所以在谷歌的一个 Compose 示例中,我注意到他们在可组合屏幕之间导航之前检查生命周期是否恢复:
// In order to discard duplicated navigation events, we check the Lifecycle
if (from.lifecycleIsResumed()) {
navController.navigate("${MainDestinations.COURSE_DETAIL_ROUTE}/$newCourseId")
}
/**
* If the lifecycle is not resumed it means this NavBackStackEntry already processed a nav event.
*
* This is used to de-duplicate navigation events.
*/
private fun NavBackStackEntry.lifecycleIsResumed() =
this.lifecycle.currentState == Lifecycle.State.RESUMED
似乎所有其他样本都没有它,
nowinandroid
也一样,我也不认为文档也有它。
它仍然相关吗?我们是否应该使用它?
您引用错误的代码行#456(同时点击多次导航).
如果同时点击多个项目,则显示 2 个或更多详细信息 可以启动屏幕。这不一定是独一无二的 Jetpack Compose 问题,因为这困扰着很多非 Jetpack Compose 应用程序,但是 我很想知道处理它的“正确”方法是什么 在 Compose 世界中。
通过检查应用程序的生命周期状态解决错误:
/**
* If the lifecycle is not resumed it means this NavBackStackEntry already processed a nav event.
*
* This is used to de-duplicate navigation events.
*/
private fun NavBackStackEntry.lifecycleIsResumed() =
this.lifecycle.currentState == Lifecycle.State.RESUMED
它仍然相关吗? 是的,至少我个人还没有找到他们在发布中实施它的任何变更日志。
我们是否应该使用它? 如果您的目标不是导航到多个目的地,是的。