Compose Multiplatform中BackHandler在iOS端失效问题及示例求助
Compose Multiplatform中BackHandler在iOS端失效问题及示例求助
我正在开发一个基于Compose Multiplatform 1.8.0的KMM应用,已经添加了ui-backhandler依赖:
ui-backhandler = { module = "org.jetbrains.compose.ui:ui-backhandler", version.ref = "compose-multiplatform" }
以下是我的核心代码实现:
共享Compose代码
@Composable @Preview fun App( navController: NavHostController = rememberNavController(), ) { KoinContext { MyTheme { Scaffold() { innerPadding -> NavHost( navController = navController, startDestination = Screen.Dashboard.name ) { composable(route = Screen.MyGroups.name) { GroupsScreen( navigateUp = { navController.navigateUp() } ) } } } } } } @OptIn(ExperimentalComposeUiApi::class) @Composable fun GroupsScreen( navigateUp: () -> Unit ) { BackHandler(enabled = true) { navigateUp() } // 其他UI实现代码 }
iOS端代码
iosMain中的Kotlin入口
fun MainViewController() = ComposeUIViewController { App() }
SwiftUI层封装代码
struct ComposeView: UIViewControllerRepresentable { func makeUIViewController(context: Context) -> UIViewController { MainViewControllerKt.MainViewController() } func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} } struct ContentView: View { var body: some View { ComposeView() .ignoresSafeArea(edges: .all) .ignoresSafeArea(.keyboard) } }
我原本以为这套实现已经能让BackHandler正常工作,但在iOS设备上左边缘的返回手势完全无法触发页面关闭,BackHandler似乎根本没生效。
现在有两个问题想请教大家:
- 我的代码哪里可能存在问题,导致iOS端的BackHandler失效?
- 哪里能找到Compose Multiplatform在iOS上使用BackHandler的完整示例?我在官方仓库里找不到任何相关示例,尝试给示例文件夹里的项目添加BackHandler时,要么项目版本过时,要么只有单个页面,根本没法测试返回逻辑。
内容来源于stack exchange
相关产品推荐
相关产品推荐

