【kotlin组件】SnackbarHost消息提示机制,compose中进行消息提示

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

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值