在我看来有两种相等的结构,它们中的哪一种应该在什么时候使用,以及这些方法的优点是什么?
第一个是:
private val _chats: MutableStateFlow<List<Chat>> = MutableStateFlow(emptyList())
val chats: StateFlow<List<Chat>> = _chats.asStateFlow()
init {
viewModelScope.launch {
repository.chatsFlow.collect { chats ->
_chats.value = chats
}
}
}
第二个:
val chats: StateFlow<List<Chat>> = repository.chatsFlow
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000L),
initialValue = emptyList()
)
2条答案
按热度按时间vi4fp9gy1#
应该避免使用MutableStateFlow/asFlow方式。除了非常冗长之外,它还不断地收集上游流,即使它没有从上游流收集任何东西,这会浪费资源。
wxclj1h52#
从基本层面上看,是的。它们(几乎)相同:它们都创建了
val chats
,然后可以在ViewModel中进一步使用。关键的区别是
val _chats
-虽然chats
是不可变的,_chats
是可变的;如果_chats
的值发生了变化,chats
中的值也会发生变化,这样你就可以控制可变列表中的数据,同时也可以为你的ViewModel提供一个不可变的列表。