为什么说 "Calls to launch should happen inside a LaunchedEffect and not composition"?
Why it says "Calls to launch should happen inside a LaunchedEffect and not composition"?
我是 jetpack compose 的新手,我尝试构建小项目来学习 jetpack compose,我有示例代码,并且
composableScope.launch
它抛出一个错误,因为启动调用应该发生在 LaunchedEffect 内部,而不是 launch
的组合,知道吗?
val composableScope = rememberCoroutineScope()
val currentPage = onBoardViewModel.currentPage.collectAsState()
Scaffold(
modifier = Modifier.fillMaxSize(),
scaffoldState = scaffoldState
) {
Surface(
modifier = Modifier.fillMaxSize()
) {
composableScope.launch {
pagerState.animateScrollToPage(
page = currentPage.value
)
}
}
}
您不能直接在“组合”(您声明 UI 的 Composable 函数中的位置)中调用协程,因为这个函数可以随时被多次调用编写框架。
相反,如果您想在组合过程中调用协程,则应使用 LaunchedEffect
(阅读更多内容 here)。或者,如果您需要在事件(如点击)中使用协程,则应使用 rememberCoroutineScope
.
LaunchedEffect(someKey) { // the key define when the block is relaunched
// Your coroutine code here
}
或
Modifier.clickable {
coroutineScope {
// your coroutine here
}
}
我是 jetpack compose 的新手,我尝试构建小项目来学习 jetpack compose,我有示例代码,并且
composableScope.launch
它抛出一个错误,因为启动调用应该发生在 LaunchedEffect 内部,而不是 launch
的组合,知道吗?
val composableScope = rememberCoroutineScope()
val currentPage = onBoardViewModel.currentPage.collectAsState()
Scaffold(
modifier = Modifier.fillMaxSize(),
scaffoldState = scaffoldState
) {
Surface(
modifier = Modifier.fillMaxSize()
) {
composableScope.launch {
pagerState.animateScrollToPage(
page = currentPage.value
)
}
}
}
您不能直接在“组合”(您声明 UI 的 Composable 函数中的位置)中调用协程,因为这个函数可以随时被多次调用编写框架。
相反,如果您想在组合过程中调用协程,则应使用 LaunchedEffect
(阅读更多内容 here)。或者,如果您需要在事件(如点击)中使用协程,则应使用 rememberCoroutineScope
.
LaunchedEffect(someKey) { // the key define when the block is relaunched
// Your coroutine code here
}
或
Modifier.clickable {
coroutineScope {
// your coroutine here
}
}