决定在我的新Jetpack Compose项目中尝试***Material Design 3***。一切都很舒适,直到我需要展示一个Snackbar时,我撞到了墙上。
在***MD2***中,这非常简单,你可以在协程范围内使用SnackbarHostState.showSnackbar()
函数在脚手架中显示snackbar。我观察到你只需要从Material Library导入androidx.compose.material.rememberScaffoldState
。
import androidx.compose.material.rememberScaffoldState
@Composable
fun MyScreenInMaterial2() {
val scaffoldState = rememberScaffoldState()
}
当我在***MD3***中尝试相同的操作时,rememberScaffoldState()
函数无法解析。
对于那些在MD3世界潜水的人来说,如何在脚手架中显示Snackbar?我已经检查了文档和在线资源,但我还没有找到解决方案。
3条答案
按热度按时间wvmv3b1j1#
这里有一个来自官方文档的示例。
ltskdhd12#
如果你使用
CoroutineScope
,你会得到一个警告,说CoroutineCreationDuringComposition
。官方文档建议使用
LaunchedEffect
来避免这种副作用。因此,建议的代码看起来像这样:
dwthyt8l3#
在我的例子中,有一个编译错误:
当在
onClickChip
lambda内部调用LaunchedEffect
时。有一个替代选项,灵感来自这个answer
对于那些想要在lambda(w/o
@Composable
)中显示Compose Snackbar的用户在
LaunchedEffect
上观察showSnackbar.value
的更改以取消/重新启动,如果是showSnackbar.value == true
,则显示snackbar,否则不执行任何操作