fun <T : RealmModel> T?.toChangesetFlow(): Flow<ObjectChange<T>?>
返回监控此 RealmObject 更改的流。 它将在订阅时发出当前 RealmObject。 对于 RealmObject 的每次更新,都会发送一个ObjectChange,该 ObjectChange由 RealmObject 及其相应的ObjectChangeSet对组成。 首次发出 RealmObject 时,变更集将为null
。
RealmObject 在更新时将不断发出。 此流程永远不会完成。
发出的项被冻结(请参阅RealmObject.freeze )。 这意味着它们是不可变的,可以在任何线程上读取。
Realm流始终从持有活动Realm的线程中发出项目。 这意味着,如果需要进行进一步处理,建议在计算调度程序上收集值:
object.toChangesetFlow()
.map { change -> doExpensiveWork(change) }
.flowOn(Dispatchers.IO)
.onEach { change ->
// ...
}.launchIn(Dispatchers.Main)
如果您希望toChangesetFlow()
停止发出项目,可以通过调用kotlinx.coroutines.flow.first来指示流程仅发出第一项:
val foo = object.toChangesetFlow()
.flowOn(context)
.first()
UnsupportedOperationException
- 如果所需的协程框架不在类路径上,或者相应的Realm 实例不支持流。
IllegalStateException
- 如果 Realm 不是在 事件循环 线程上打开的。
返回
永远不会完成的 Kotlin Flow 。