填充并发出StateFlow列表



我想使用StateFlow。但现在,我找不到任何能帮助我的讲座

我面临一个问题:首先,我有一个singleton,它包含一个String列表,我想要一些东西"容易";理解,即使这不是目前的目标。目的是用字符串填充和发出列表(稍后它将是一个复杂的对象(。

class CustomStateFlow() {
private val _custom = MutableStateFlow(emptyList<String>())
val custom: StateFlow<List<String>> = _custom
fun addString(string: String) {
val tempList = _custom.value.toMutableList()
tempList.add(string)
_custom.value = tempList
}

这似乎有效,但我不喜欢这份临时名单。。。如果没有,我就无法触发";收集";在我的片段中的习俗。

有没有一种方法可以在不使用tempList的情况下实现这一点?

谢谢

如果您不想使用临时变量将新项添加到可变列表中,可以使用加(+(运算符函数。这样做会返回一个新的列表(不可变的(,其中添加了可以进一步使用的值。

所以伪代码变成这样:val newList = oldMutableList + newItem

类似地,您可以从列表中删除项目,如val newList = oldMutableList - itemToRemove

在这里阅读更多关于kotlin集合的运算符函数!

我在三个阶段内完成这项工作;回购、视图模型和组合函数。

数据操作的存储库

//This object is the list you will edit
private val _easyChatList =  mutableListOf<ChatDescriptionEntity>()
//This object is a wrapper. if you pass it a new object it will call emit
private val _easyChatListHolder = MutableStateFlow(listOf<ChatDescriptionEntity>())
//this object sends out the immutable list
override val easyChatList = _easyChatListHolder.asStateFlow()
//-- add() or remove or sort or shuffle etc --//
fun sortUpdatedChatLists()
{
_easyChatList.sort()

val nl = _easyChatList.toList() // extract a new list to force the emit
_easyChatListHolder.value = nl

}

您的片段或合成的视图模型,列表发送到的位置

var easyChatList: MutableState<List<ChatDescriptionEntity>> = mutableStateOf(listOf())
init {
repositoryInterface.getChatsList()
viewModelScope.launch {
repositoryInterface.easyChatList.collect{
i -> easyChatList.value = i
}
}

}

最后在你的作文方法。从视图模型中交给可变状态的任何组合都将对列表更改做出反应

val chatList = viewModel.easyChatList.value

ChatListContent(items = chatList, action = navToChat)

相关内容

  • 没有找到相关文章

最新更新