我找了很多,但找不到答案。我有一个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被传递到所有不同的屏幕。默认情况下,当应用程序打开时,我说当用户单击TopAppBar的汉堡图标时,NaVDrawer应该打开:
IconButton(onClick = { coroutineScope.launch { drawerState.open() }})
型
然后,用户从抽屉中选择一个目标,并单击NavDrawer中的一个项目。点击时,我说抽屉应关闭:
scope.launch { drawerState.close() }
型
现在我的问题是,为什么在CoroutineScope内部的协程之间没有冲突?如果我从默认导航到屏幕2,则会发生以下情况:
Screen1中的coroutine1被取消,因为DefaultScreen的composable离开了composition。
MainActivity中的coroutine2仍在运行,因为单击NavDrawerstill的图标,其值为Drawer.Closed。当用户现在点击屏幕2中TopAppBar的HamburgerButton时,coroutine3以值Drawer.Open开始。
1条答案
按热度按时间zfciruhq1#
@Jorn好吧,也许我忘记了drawerstate.close()是一个函数,当函数完成任务时,协程作业是不活动的。我误解了这个概念,认为协程始终保持DrawerState的值。