【发布时间】:2021-07-23 12:50:42
【问题描述】:
我正在尝试构建一个使用 kotlin 从数据层到视图的流的应用程序,但在解决像这样的简单问题时遇到了很多困难。
我正在从来自我的数据层的 StateFlow 中收集整数值,并希望在将其共享给我的 viewmodel 并通过另一个 StateFlow 进行查看之前建立一个列表。
示例代码:
class MyDataSource {
val inputFlow: StateFlow<Int> = TODO()
}
class MyService(
dataSource: MyDataSource
) {
private val intList: MutableList<Int> = ArrayList()
private val _intFlow = MutableStateFlow<List<Int>>(listOf())
val intFlow: StateFlow<List<Int>> = _intFlow
init {
GlobalScope.launch(Dispatchers.IO) {
dataSource.inputFlow.collect {
if (!intList.contains(it))
intList.add(it)
_intFlow.emit(ArrayList(intList))
}
}
}
}
难道没有更好的方法吗?就像我错过的流量运算符?这似乎特别难看,因为我每次都需要构建一个新的 ArrayList,否则即使列表的内容发生了变化,流程也不会发送新值,因为它仍然是同一个列表。
【问题讨论】:
-
嗨,你在关注 MVVM 吗?您的服务类代码不是 viewModel,您在寻找示例吗?
-
@ZaidZakir 它可能是 ViewModel 的一部分,但我选择将其外部化到另一个我称之为“服务”的层(类似于某些应用程序有一个“存储库”层,但我的应用程序更多“业务逻辑繁重”并减少对外部 API 的使用)。但我不明白这与我的问题有什么关系。
标签: android kotlin kotlin-coroutines android-mvvm kotlin-flow