kotlin 在LaunchedEffect中更改SnackBar的背景颜色(Jetpack Compose)

bxfogqkk  于 2023-10-23  发布在  Kotlin
关注(0)|答案(2)|浏览(211)

我试图通过Android Jetpack compose中的collect将消息从viewModel传递到我的Screen Activity中,在那里我试图显示snackbar,但由于某种原因,它没有改变snackbar上的背景颜色和操作按钮颜色(也没有进入if条件),并且它也没有与我传递的字符串进行比较,并且总是进入else条件。请建议如何从活动屏幕处理此场景

// From ViewModel

private val _showMessage = MutableSharedFlow<String>()
val showMessage get() = _showMessage.asSharedFlow()
_showMessage.emit("My custom message")

// From ViewController Activity

val scaffoldState: ScaffoldState = rememberScaffoldState()

SnackbarHost(scaffoldState.snackbarHostState) { data ->
    // custom snackbar with the custom colors
    Snackbar(
        actionColor = Color.Blue,
        backgroundColor = Color.Gray,
    )
}

LaunchedEffect(scaffoldState.snackbarHostState) {
    viewModel.showMessage.collect {
        if (viewModel.showMessage.equals(“My custom message”)) {
            scaffoldState.snackbarHostState.showSnackbar(it, "OK", SnackbarDuration.Indefinite)
        } else {
            println("view message ${viewModel.showMessage.equals("My custom message”)}”).  /// Coming as false always
            scaffoldState.snackbarHostState.showSnackbar(it)
        }
    }
}
zi8p0yeb

zi8p0yeb1#

这是因为viewModel.showMessageSharedFlow<String>,而不是String
您正在收集String,您可以使用它命名参数或作为it进行操作。

LaunchedEffect(scaffoldState.snackbarHostState) {
    viewModel.showMessage.collect { message: String ->
        if (message == "My custom message") {
        
        }

}
enxuqcxy

enxuqcxy2#

containerColor添加到您的snackbar以更改snackbar的背景颜色
范例:

val snackbarHostState = remember { SnackbarHostState() }
    SnackbarHost(snackbarHostState) { data ->
        Snackbar(
            snackbarData = data,
            containerColor = Color.Red // For changing snackbar background color 
        )
    }

相关问题