1、compose中的消息提示和其它的toast类似,但是没有像他们一样直接能够引用,需要多进行一步的操作
2、先附上官方的教程内容:
val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
floatingActionButton = {
ExtendedFloatingActionButton(
text = { Text("Show snackbar") },
icon = { Icon(Icons.Filled.Image, contentDescription = "") },
onClick = {
scope.launch {
snackbarHostState.showSnackbar("Snackbar")
}
}
)
}
) { contentPadding ->
// Screen content
}
这是官方的教程内容,可能理解起来不是很好弄,
它默认的是提供了一个Snackbar组件给我们,我们只要直接设置 message 就可以把内容反馈到默认的组件中去,如果想要自定义的组件,那么只能够自己操作,如何实现呢?
3、Snackbar 这个组件我们可以不使用,可以使用基本的组件进行组合,这样很多样式就会和我们想要的一样了/
SnackbarHost(hostState = snackbarHostState,) {
Box (
modifier = Modifier.fillMaxSize()
){
Column(
modifier = Modifier
.align(Alignment.BottomCenter)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = it.visuals.message, modifier = Modifier.background(BgColor).padding(10.dp))
}
}
}
SnackbarHost(hostState = snackbarHostState,) ,SnackbarHost根据状态的机制进行显示还是隐藏相应的内容,其实我们也可以做一个内容,但是他只是帮我们完善好了内部消息传递的代码而已,比如
其实可以看看官方提供的组合函数,附上网址
其实可以通过showSnackbar进行消息的传递,然后在SnackbarHost中进行获取,观看SnackbarHost的源代码,其它知道他是通过 Text(text = it.visuals.message 进行消息的获取,得到这个内容之后我们就可以进行很多自定义的操作了,showSnackbar通过这个传递的参数都能够经过visuals 这个值进行获取
Compose 中的附带效应 | Jetpack Compose | Android Developers
创建副作用函数进行协程挂起
val scope = rememberCoroutineScope()
val snackbarHostState = SnackbarHostState()
SnackbarHost(hostState = snackbarHostState,) {
Box (
modifier = Modifier.fillMaxSize()
){
Column(
modifier = Modifier
.align(Alignment.BottomCenter)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = it.visuals.message, modifier = Modifier.background(BgColor).padding(10.dp))
}
}
}
val scope = rememberCoroutineScope()
scope.launch {
snackbarHostState.let {
it.showSnackbar("22222")
}
}