Jetpack Compose CoroutineScope 与导航

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

我搜索了很多但找不到答案。我有一个 ModalNavigationDrawer 和 3 个带有 TopAppBar 的不同屏幕。在实现 Drawer 的 MainComposable() 中,我已经实例化了 Drawerstate 和 CoroutineScope,如下所示:

@Composable
fun MainCompose() {

val navController = rememberNavController()
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
val scope = rememberCoroutineScope()

drawerstate 向下传递到 Drawer 以及 Screen1、Screen2 和 Screen3。 并且 scope 被传递到所有不同的屏幕。默认情况下,当应用程序打开时,我说当用户单击 NaVDrawer 应该打开的 TopAppBar 的汉堡图标时:

IconButton(onClick = { coroutineScope.launch { drawerState.open() }})

然后用户从抽屉中选择一个目的地,并单击导航抽屉中的一项。单击时我说抽屉应该关闭:

scope.launch { drawerState.close() }

现在我的问题是,为什么CoroutineScope内部的协程之间没有冲突?如果我从默认导航到 screen2 则会发生这种情况:

Screen1 中的 coroutine1 被取消,因为 DefaultScreen 的可组合项离开了组合。

自从单击值为

Drawer.Closed 的 NavDrawerstill 图标后,MainActivity 中的 coroutine2 仍在运行。 当用户现在单击 Screen2 中 TopAppBar 的汉堡按钮时,coroutine3以值 Drawer.Open开始。

kotlin scope android-jetpack-compose navigation-drawer kotlin-coroutines
© www.soinside.com 2019 - 2024. All rights reserved.