From 6ef51a48794ed42c05df84d0b0fe607d9574f502 Mon Sep 17 00:00:00 2001 From: meyou <2636699780@qq.com> Date: Tue, 19 May 2026 23:47:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=BF=81=E7=A7=BB=E8=87=B3?= =?UTF-8?q?=E5=AE=98=E6=96=B9=20PredictiveBackHandler=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=20navigationevent-compose=20=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 使用 androidx.activity.compose.PredictiveBackHandler (Flow 模式) 替换 JetBrains NavigationBackHandler,提升设备兼容性。 --- gradle/libs.versions.toml | 2 -- shared/build.gradle.kts | 1 - .../plus/rua/project/Platform.android.kt | 31 ++++++++----------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3b1fe4e..997fd04 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,6 @@ material3 = "1.10.0-alpha05" kotlinx-datetime = "0.8.0" tyme4kt = "1.4.5" sketch = "4.4.0" -navigationevent = "1.0.1" [libraries] kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } @@ -35,7 +34,6 @@ tyme4kt = { module = "cn.6tail:tyme4kt", version.ref = "tyme4kt" } sketch-compose = { module = "io.github.panpf.sketch4:sketch-compose", version.ref = "sketch" } sketch-animated-gif = { module = "io.github.panpf.sketch4:sketch-animated-gif", version.ref = "sketch" } sketch-compose-resources = { module = "io.github.panpf.sketch4:sketch-compose-resources", version.ref = "sketch" } -navigationevent-compose = { module = "org.jetbrains.androidx.navigationevent:navigationevent-compose", version.ref = "navigationevent" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index b8312ec..e087e53 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -49,7 +49,6 @@ kotlin { implementation(libs.sketch.compose) implementation(libs.sketch.animated.gif) implementation(libs.sketch.compose.resources) - implementation(libs.navigationevent.compose) } commonTest.dependencies { implementation(libs.kotlin.test) diff --git a/shared/src/androidMain/kotlin/plus/rua/project/Platform.android.kt b/shared/src/androidMain/kotlin/plus/rua/project/Platform.android.kt index e0fe6b9..aef4f5c 100644 --- a/shared/src/androidMain/kotlin/plus/rua/project/Platform.android.kt +++ b/shared/src/androidMain/kotlin/plus/rua/project/Platform.android.kt @@ -1,13 +1,12 @@ package plus.rua.project import android.os.Build +import androidx.activity.BackEventCompat import androidx.activity.compose.BackHandler +import androidx.activity.compose.PredictiveBackHandler import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.navigationevent.NavigationEventInfo -import androidx.navigationevent.NavigationEventTransitionState -import androidx.navigationevent.compose.NavigationBackHandler -import androidx.navigationevent.compose.rememberNavigationEventState +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.flow.Flow class AndroidPlatform : Platform { override val name: String = "Android ${Build.VERSION.SDK_INT}" @@ -26,19 +25,15 @@ actual fun PredictiveBackHandler( onBack: () -> Unit, onCancel: () -> Unit ) { - val navState = rememberNavigationEventState(NavigationEventInfo.None) - - NavigationBackHandler( - state = navState, - isBackEnabled = enabled, - onBackCancelled = onCancel, - onBackCompleted = onBack - ) - - LaunchedEffect(navState.transitionState) { - val ts = navState.transitionState - if (ts is NavigationEventTransitionState.InProgress) { - onProgress(ts.latestEvent.progress) + // 官方 PredictiveBackHandler — Flow 模式:collect 完成=返回,CancellationException=取消 + PredictiveBackHandler(enabled = enabled) { progress: Flow -> + try { + progress.collect { event -> + onProgress(event.progress) + } + onBack() + } catch (e: CancellationException) { + onCancel() } }