kotlin-extensions / io.realm.kotlin / io.realm.RealmList / toChangesetFlow

toChangesetFlow

fun <T> RealmList<T>.toChangesetFlow(): Flow<CollectionChange<RealmList<T>>>

返回监控此 RealmList 更改的。 它将在订阅时发出当前的 RealmList。 每次更新 RealmList 时,都会发送一个CollectionChange ,由 RealmList 及其相应的OrderedCollectionChangeSet对组成。 首次发出 RealmList 时,变更集将为null

RealmList 在更新时会不断发出。 此流程永远不会完成。

发出的项被冻结(请参阅RealmList.freeze )。 这意味着它们是不可变的,可以在任何线程上读取。

Realm流始终从持有活动Realm的线程中发出项目。 这意味着,如果需要进行进一步处理,建议在计算调度程序上收集值:

list.toChangesetFlow()
  .map { change -> doExpensiveWork(change) }
  .flowOn(Dispatchers.IO)
  .onEach { change ->
    // ...
  }.launchIn(Dispatchers.Main)

如果您希望toChangesetFlow()停止发出项目,可以通过调用kotlinx.coroutines.flow.first来指示流程仅发出第一项:

val foo = list.toChangesetFlow()
  .flowOn(context)
  .first()

异常

UnsupportedOperationException - 如果所需的协程框架不在类路径上,或者相应的Realm 实例不支持流。

IllegalStateException - 如果 Realm 不是在 事件循环 线程上打开的。

返回
永远不会完成的 Kotlin Flow