在更新具有流的DataStore中的值之前,请先读取该值



我对使用Kotlin的flows和Jetpack的DataStore很陌生。但我正在编写一个自定义对象列表(序列化为JSON(,我希望在插入新值之前更新这些对象。

因此,当想要插入一个新元素时,以前我必须读取当前值,因此我从流中收集值,添加新的值,然后在DataStore上写入。问题是,一旦DataStore完成了值的写入,我就会从flow接收到一个新的事件,因此我正在循环写入值。

我的问题是,有没有办法只从flow中收集一次值,或者在我读取值后取消flow,或者有没有更好的方法用DataStore来管理这种情况?

是的,您只能从类似的数据存储中获取数据

// This function belongs on your datastore file
suspend fun getMyCustomData(): String {
val preferences = dataStore.data.first()
return preferences[MY_CUSTOM_KEY] ?: ""
}

读取值后,您可以更新对象,而不会陷入循环。

最新更新