kotlin - 如何在 mutableStateOf() 中存储一对值
问题描述
我放入SelectPost action
选定的帖子(来自@Composable 屏幕)
mainViewModel.actions.offer(MainAction.SelectPost(post))
我在枚举类中定义了屏幕。有时我想导航到另一个屏幕并在它们之间传递数据。在那种情况下,我想传递Post
对象
我的视图模型:
class MainViewModel : ViewModel() {
val state = MainViewState()
val actions = Channel<MainAction>()
init {
viewModelScope.launch {
try {
actions.receiveAsFlow().collect { action ->
when (action) {
is MainAction.SelectPost -> {
state.destinationScreen.value = DestinationScreen.POST_DETAILS(action.data)
}
}
}
} catch (e: Exception) {}
}
}
}
enum class DestinationScreen(val data: Any? = null){
DEFAULT,
POST_DETAILS
}
class MainViewState {
val destinationScreen = mutableStateOf(DestinationScreen.DEFAULT)
}
sealed class MainAction {
data class SelectPost(val data: Post) : MainAction()
}
在我的 @Composable 主屏幕中,我观察 viewModel 中的状态,当状态发生变化时,我想导航到选定的屏幕并将数据传递给它。
@Composable
fun AppNavigationHost() {
val mainViewModel: MainViewModel = viewModel()
val appNavController = rememberNavController()
NavHost(
navController = appNavController,
startDestination = Screens.HOME.title
) {
when (val destination = mainViewModel.state.destinationScreen.value) {
DestinationScreen.POST_DETAILS -> {
composable(DestinationScreen.POST_DETAILS.name) {
PostDetailsScreen(destination.data as Post)
}
}
else -> {}
}
}
}
问题出在这一行:
is MainAction.SelectPost -> {
state.destinationScreen.value = DestinationScreen.POST_DETAILS(action.data)
}
POST_DETAILS
是未解决的参考。由于接收器类型不匹配,以下候选均不适用:
如何将数据设置为枚举类中的项目?我应该使用 Pair() 吗?
解决方案
推荐阅读
- c# - 在 .NET 5 Web API 中动态连接到多个数据库(取决于经过身份验证的用户)
- azure - Azure API 管理中的脚本策略
- oauth-2.0 - 在哪里/如何在无服务器上存储第 3 方 JWT?
- microsoft-graph-api - 获取用户列表 Azure
- arangodb - 我无法访问 ArangoDB 网络用户界面
- java - eclipse 中的 Java maven 项目,源/目标设置为 1.8,Java 版本 14 给出了古老的 Missing artifact jdk.tools:jdk.tools:jar:1.6
- nginx - 发出POST请求后不允许Nginx 405
- c - 为什么当我在条件中写“”时while循环有效
- amazon-web-services - 具有相同参数的 AWS API Gateway 覆盖集成请求映射模板
- sql-server - SQL Server PK 包含在非聚集索引中