rachael
11/30/2021, 5:42 PMChris Fillmore
11/30/2021, 7:29 PMMutableStateFlow<List<Message>>
you can call `update()`:
https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/update.htmlChris Fillmore
11/30/2021, 7:30 PMcompareAndSet()
in a loop:
public inline fun <T> MutableStateFlow<T>.update(function: (T) -> T) {
while (true) {
val prevValue = value
val nextValue = function(prevValue)
if (compareAndSet(prevValue, nextValue)) {
return
}
}
}
Chris Fillmore
11/30/2021, 7:40 PMclass MessagesOwner(private val pubsub: SomeEmitter<Messages>) {
val messagesState = MutableStateFlow<List<Messages>?>(null)
init {
pubsub.on("messages") { messages ->
messagesState.update {
// Your logic here, to merge your messages or whatever
}
}
}
suspend fun loadMessagesFromGet() {
val messagesFromGet: List<Messages> = /* do your GET */
messagesState.update { messages ->
// Your logic here, to merge your messages or whatever
}
}
}
Chris Fillmore
11/30/2021, 7:41 PMmessagesState.update { list ->
list.toMutableList().apply {
// Modify the list
}
}
rachael
11/30/2021, 8:28 PM