如何让 ViewModel 在 Compose 桌面应用程序中相互通信?

问题描述 投票:0回答:1

我正在构建一个 Jetpack Compose Deskop 应用程序,目前草稿如下所示:

1
2
是两个
ViewModel

// 1
class FilterViewModel {
    val query = mutableStateOf<String?>(null)
    val timeframe = mutableStateOf("Any")
}

// 2
class GridViewModel {
    val items = mutableListOf("foo", "bar", "baz")
}

我希望

GridViewModel
items
更改时更新其
FilterViewModel
。在这种情况下我该怎么做? Jetpack Compose Deskop 是否可以提供任何东西,或者也许有一些更通用的解决方案?

kotlin design-patterns viewmodel compose-desktop
1个回答
0
投票

考虑定义一个“数据层”,例如组合远程和/或本地数据源的存储库。从链接的文档:

UI层包含UI相关的状态和UI逻辑,而数据层 包含应用程序数据和业务逻辑。

这里的想法是,是的,您在来自
FilterViewModel

的查询/搜索中需要像“Number”这样的本地数据,并且还需要在列表中的项目中显示带有“Number”的结果。然而,通过数据层和数据驱动架构,它们都可以成为 ViewModel 中的实时数据片段,在数据层中观察相同的单一事实源。一般层次结构:

层次结构示例:

    FilterViewModel
  • 读写
     
    NumbersRepo<->、
    TimeframeRepo
    QueryRepo
  • FilterViewModel
  • 写道 ->
    CurrentItemsRepo
  • GridViewModel
  • 读取 ->
    CurrentItemsRepo
    
    
  • 这些存储库使用远程数据+ Room 和 DataStore,或者它们可以只是单例/对象来开始。我建议您查看
Flow

© www.soinside.com 2019 - 2024. All rights reserved.