在 Compose 中导航之前检查生命周期

问题描述 投票:0回答:1

所以在谷歌的一个 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

https://github.com/android/compose-samples/blob/main/Owl/app/src/main/java/com/example/owl/ui/NavGraph.kt#L122

似乎所有其他样本都没有它,

nowinandroid
也一样,我也不认为文档也有它。

它仍然相关吗?我们是否应该使用它?

android android-jetpack-compose android-lifecycle jetpack-compose-navigation
1个回答
1
投票

您引用错误的代码行#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

它仍然相关吗? 是的,至少我个人还没有找到他们在发布中实施它的任何变更日志。

我们是否应该使用它? 如果您的目标不是导航到多个目的地,是的。

© www.soinside.com 2019 - 2024. All rights reserved.