mit*_*tch 7 android-jetpack-compose
描述
调用showSnackbar并SnackbarHostState传递duration参数不会关闭 Snackbar。协程似乎无限暂停。
重现步骤:
val snackbarHostState = remember{mutableStateOf(SnackbarHostState())}
Column {
Button(
onClick = {
lifecycleScope.launch {
val time = System.currentTimeMillis()
Log.d(TAG, "showing snackbar")
snackbarHostState.value.showSnackbar(
message = "Hey look a snackbar",
actionLabel = "Hide",
duration = SnackbarDuration.Short
)
Log.d(TAG, "done ${System.currentTimeMillis()-time}") // <-- Never called
}
}
) {
Text("Show snackbar")
}
snackbarHostState.value.currentSnackbarData?.let { snackbarData ->
ConstraintLayout(
modifier = Modifier.fillMaxSize()
) {
val snackbar = createRef()
Snackbar(
modifier = Modifier.constrainAs(snackbar) {
bottom.linkTo(parent.bottom)
start.linkTo(parent.start)
end.linkTo(parent.end)
},
snackbarData = snackbarData,
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想您需要将其包装Snackbar在 a 中SnackbarHost,因为这可以按预期工作。
val snackbarHostState = remember{mutableStateOf(SnackbarHostState())}
Column {
Button(
onClick = {
lifecycleScope.launch {
val time = System.currentTimeMillis()
Log.d(TAG, "showing snackbar")
snackbarHostState.value.showSnackbar(
message = "Hey look a snackbar",
actionLabel = "Hide",
duration = SnackbarDuration.Short
)
Log.d(TAG, "done ${System.currentTimeMillis()-time}") // <-- Never called
}
}
) {
Text("Show snackbar")
}
ConstraintLayout(
modifier = Modifier.fillMaxSize()
) {
val snackbar = createRef()
SnackbarHost(
modifier = Modifier.constrainAs(snackbar) {
bottom.linkTo(parent.bottom)
start.linkTo(parent.start)
end.linkTo(parent.end)
},
hostState = snackbarHostState.value,
snackbar = {
Snackbar(
action = {
TextButton(onClick = {
snackbarHostState.value.currentSnackbarData?.dismiss()
}) {
Text(
text = "Hide",
)
}
}
) {
Text("hey look a snackbar")
}
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6073 次 |
| 最近记录: |