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

toChangesetFlow

fun <T : RealmModel> RealmResults<T>.toChangesetFlow(): Flow<CollectionChange<RealmResults<T>>>

이 RealmResults의 변경 사항을 모니터링하는 흐름 을 반환합니다. 구독 시 현재 RealmResults를 내보냅니다. RealmResults가 업데이트 될 때마다 RealmResults 및 해당 OrderedCollectionChangeSet 가 있는 쌍으로 구성된 CollectionChange 가 전송됩니다. 변경 세트는 RealmResults가 처음 방출될 때 null 이(가) 됩니다.

RealmResults는 업데이트되는 대로 지속적으로 방출됩니다. 이 흐름은 절대 완료되지 않습니다.

방출된 항목은 동결됩니다( RealmResults.freeze 참조). 즉, 변경할 수 없으며 모든 스레드에서 읽을 수 있습니다.

Realm 흐름은 항상 라이브 Realm 을 보유하는 스레드에서 항목을 방출합니다. 즉, 추가 처리 를 수행해야 하는 경우 계산 디스패처에서 값을 수집하는 것이 좋습니다.

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

toChangesetFlow() 에서 항목 방출을 중지하려면 kotlinx.coroutines.flow.first 를 호출하여 첫 번째 항목만 방출하도록 흐름에 지시할 수 있습니다.

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

예외

UnsupportedOperationException - 필요한 코루틴 프레임워크 가 클래스 경로에 없거나 해당 Realm 인스턴스 가 흐름을 지원 하지 않는 경우.

IllegalStateException - Realm이 루퍼 스레드에서 열리지 않은 경우.

Return
절대 완료되지 않는 Kotlin Flow 입니다.