我试图通过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)
}
}
}
2条答案
按热度按时间zi8p0yeb1#
这是因为
viewModel.showMessage
是SharedFlow<String>
,而不是String
。您正在收集String,您可以使用它命名参数或作为
it
进行操作。enxuqcxy2#
将
containerColor
添加到您的snackbar以更改snackbar的背景颜色范例: