1、compose中的消息提示和其它的toast类似,但是没有像他们一样直接能够引用,需要多进行一步的操作

2、先附上官方的教程内容:

快捷信息栏  |  Jetpack Compose  |  Android Developers

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")
                }
            }

Logo

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐